如何将分层权限类存储在 Person 类中?

Posted

技术标签:

【中文标题】如何将分层权限类存储在 Person 类中?【英文标题】:How can I store the hierarchic Authority Class in the Person Class? 【发布时间】:2017-08-17 14:25:42 【问题描述】:

我的问题是:(如何?)我可以使用 Spring Security 插件将我的用户“权限”存储在 Grails 的用户类中吗?

我给出了以下 SQL 结构:

用户表:

...
varchar(255): username
...
int(2) rank: (refers to Rank table)

排名表:

int(11): id
varchar(25): rank_name

我可以配置我的域类,以使用该结构而不是典型的“用户、权限、用户权限多对多”模式吗?

等级 (id) 是分层的,这意味着等级 4 的用户从等级 3 的用户那里获得所有“权限”,等等。

编辑: 我只是在用户域中将 getAuthorities 方法替换为以下内容:

Set<Permission> getAuthorities() 
    Authority.findAllById(this.rank)
    // instead of: UserAuthority.findAllByUser(this)*.permission

【问题讨论】:

【参考方案1】:

查看GormUserDetailsService 以了解如何加载授权。 springsecurity 核心有一个authoritiesPropertyName 配置,它指定了应该返回权限的用户域的属性名称,默认值为'authorities' - 您可以修改它以根据您的域模型返回权限。

如果这不能满足您的要求,那么您也可以创建自定义用户详细信息服务。

并通过在 conf/spring/resources.groovy 中定义一个名为 userDetailsService 的 bean 来覆盖原始用户详细信息服务

【讨论】:

以上是关于如何将分层权限类存储在 Person 类中?的主要内容,如果未能解决你的问题,请参考以下文章

判断是否是同一人的方法——equals()?在Person类中提供一个比较的方法compare()返回boolean值?对象自己和自己比?

一个类中被另一个类使用的向量无法存储项目

Android 权限常量保存在哪个类中

用C++定义一个人员类

用C++定义一个人员类

如何从具有父类引用的类中获取记录?