这是一个(虚构的)结构(对不起,我知道我没有强烈的想象力),它类似于我的应用程序的结构: (Person,SuperPerson和NormalPerson是抽象的):
我想知道我是否可以在Grails中使用Spring安全性为每个类授予角色(因此这个类的所有实例都将获得这些权限)。
答案 0 :(得分:1)
不,Spring Security在实例上授予角色,而不是在类级别。
授权机构有两种方式(权限):
因此,在您的情况下,您可以采用基于角色的方法,并让每个类由一个角色代表。然后,在创建类的实例时,将其添加到适当的角色。
class PersonService {
private Map authorityGroups = [
Person: ['Person'],
NormalPerson: ['Person', 'NormalPerson'],
Employee: ['Person', 'NormalPerson', 'Employee'],
...
]
Person create(Class klass, Map props) {
def person = klass.newInstance(props)
def groups = getGroupsForClass(klass)
person.save()
groups.each {
new PersonAuthorityGroup(authorityGroup: it, person: person).save()
}
}
private Collection<AuthorityGroup> getGroupsForClass(Class klass) {
authoritiyGroups[klass.simpleName].collect {
AuthorityGroup.findByName(it)
}
}
}
然后可以像这样使用该服务:
def a = personService.create(Person, [first: 'John', last: 'Galt'])
def b = personService.create(SuperPerson, [first: 'Jane', last: 'Smith'])