这是一个(虚拟的)结构(对不起,我知道我没有很强的想象力),它类似于我的应用程序的结构:
(Person,SuperPerson和NormalPerson是抽象的):
我想知道是否可以使用Grails中的spring安全性为每个类授予角色(这样,该类的所有实例都将获得这些权限)。
最佳答案
不,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'])
关于grails - 在Spring Security中将角色授予 “class”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36969645/