grails - 在Spring Security中将角色授予 “class”

标签 grails spring-security

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

Persons Hierarchy

我想知道是否可以使用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/

    相关文章:

    gradle - 无法启动 Grails 4 应用程序,因为无法找到或加载主类

    Grails Spring Security SAML 插件 "SPSSODescriptor wasn' t 找到”

    regex - XSS 过滤器避免表单注入(inject)匹配一个它不应该匹配的字符串

    java - Spring oauth2 添加额外的 fieldp

    java - Rest API 中的 JWT token 传递

    data-binding - grails数据绑定(bind)从选择中获取ID

    list - 如何将HashMap传递到gsp页面,然后再返回到 Controller ?

    Spring Security激活永远记住我功能

    spring - 使用 spring security 存储登录用户的附加详细信息

    spring - 使用Spring Security Rest插件时出现问题