授予" class"在春天安全

时间:2016-05-01 17:26:28

标签: grails spring-security

这是一个(虚构的)结构(对不起,我知道我没有强烈的想象力),它类似于我的应用程序的结构: (Person,SuperPerson和NormalPerson是抽象的):

Persons Hierarchy

我想知道我是否可以在Grails中使用Spring安全性为每个类授予角色(因此这个类的所有实例都将获得这些权限)。

1 个答案:

答案 0 :(得分:1)

不,Spring Security在实例上授予角色,而不是在类级别。

授权机构有两种方式(权限):

  1. 直接授予他们原则(用户)
  2. 将他们授予一个组(角色),然后将原则添加到包含当时需要的权限的组中。
  3. 因此,在您的情况下,您可以采用基于角色的方法,并让每个类由一个角色代表。然后,在创建类的实例时,将其添加到适当的角色。

    使用服务授予权限的示例

    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'])