【发布时间】:2018-01-02 21:06:33
【问题描述】:
我正在准备实现 Spring Security UI 插件(我们已经实现了 Spring Security Core 插件)。我知道核心插件支持用户、角色和组,但是,我在 Spring Security UI 插件的文档中没有看到任何组的提及。 Spring Security UI 插件是否不支持创建、编辑等组?有人尝试添加此功能吗?
【问题讨论】:
我正在准备实现 Spring Security UI 插件(我们已经实现了 Spring Security Core 插件)。我知道核心插件支持用户、角色和组,但是,我在 Spring Security UI 插件的文档中没有看到任何组的提及。 Spring Security UI 插件是否不支持创建、编辑等组?有人尝试添加此功能吗?
【问题讨论】:
回复晚了,但我有同样的问题,所以我想我会尝试一下。 我自己刚刚尝试过,我相信答案是否。 (开箱即用)
spring security ui 插件不考虑组。如果您尝试编辑用户
myapp/user/edit/1
你会收到一些错误,比如:
Class groovy.lang.MissingPropertyException
Message
No such property: authority for class: com.myapp.security.SecGroup Possible solutions: authorities
我很好奇你是否找到了解决方法?否则我们将不得不自定义插件。
【讨论】:
正如 Julian 指出的那样,UI 不提供开箱即用的组支持。为避免该错误,您可以执行以下操作(自定义插件):
将用户控制器复制到您的项目中以覆盖插件的控制器:
grails s2ui-override user <your-package-for-controller>
从 UserController 中的插件代码中复制“buildUserModel”并编辑 userRoleNames 字段:
import grails.plugin.springsecurity.SpringSecurityUtils
class UserController extends grails.plugin.springsecurity.ui.UserController {
protected Map buildUserModel(user) {
...
// Added so that when using groups doesn't cause an error
Set userRoleNames
if (SpringSecurityUtils.securityConfig.useRoleGroups) {
String groupAuthorityFieldName = SpringSecurityUtils.securityConfig.authority.groupAuthorityNameField
userRoleNames = user[authoritiesPropertyName].collect { it[groupAuthorityFieldName].collect { it[authorityFieldName] } }
} else {
userRoleNames = user[authoritiesPropertyName].collect { it[authorityFieldName] }
}
...
}
【讨论】: