如何将层次结构权限 Class 存储在人员 Class 中?

How can I store the hierarchic Authority Class in the Person Class?

我的问题是:(如何?)我可以使用 Spring 安全插件在 Grails 中的用户 class 中为我的用户存储我的 "authority" 吗?

我给出了以下 SQL 结构:

用户table:

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

排名table:

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

我可以配置我的域 classes,以使用该结构而不是典型的 "User, Authority, UserAuthority many to many" 架构吗?

排名 (id) 是分层的,这意味着排名 4 的用户从排名 3 的用户那里获得所有 "authorities" 等等

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

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

查看 GormUserDetailsService 以了解授权是如何加载的。 springsecurity core有一个authoritiesPropertyName配置,指定属性权限的用户域名称,默认值为'authorities' -- 你可以修改为return 权限基于您的域模型。

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

并通过在 conf/spring/resources.groovy

中定义名称为 userDetailsService 的 bean 来覆盖原始用户详细信息服务