我正在开展grails 2.3.8
项目并尝试自定义Role Hierarchy
。我正在尝试使用rolePrefix = 'ROLE_'
更改resources.groovy
中rolePrefix = 'PERM_'
的默认值。我理解为了完成这项工作,我需要在Config.groovy
中对以下内容进行以下更改:
grails.plugins.springsecurity.userLookup.userDomainClassName = 'tpo.core.acl.AdminAccount'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'tpo.core.acl.AdminAccountPermission'
grails.plugins.springsecurity.authority.className = 'tpo.core.acl.Permission'
为了建立层次结构,我需要在我的Config.groovy
中添加它grails.plugins.springsecurity.roleHierarchy = '''
PERM_ACCOUNT_ALL > PERM_ACCOUNT_CREATE
PERM_ACCOUNT_ALL > PERM_ACCOUNT_READ
PERM_ACCOUNT_ALL > PERM_ACCOUNT_UPDATE
PERM_ACCOUNT_ALL > PERM_ACCOUNT_DELETE
'''
所以在我的控制器中,它就像是,
@Secured(['PERM_ACCOUNT_ALL'])
def index() {
redirect(action: "list", params: params)
}
当我尝试运行我的应用程序并访问我的控制器的index()
操作时,我被提示登录,这是因为@Secured()的存在,但是已成功登录,我是尚未能够访问index()
操作,并显示,抱歉,您无权查看此页面。该权限已分配给我以前登录的用户,但仍然无法访问它。
我在哪里错过了?
答案 0 :(得分:1)
还有更多内容:)
插件不允许这种改变的原因是支持标准选民。目前,有三种字符串样式可用于指定访问规则 - 角色名称,SPeL表达式和时髦的“IS_AUTHENTICATED”字符串 - IS_AUTHENTICATED_ANONYMOUSLY
,IS_AUTHENTICATED_FULLY
和IS_AUTHENTICATED_REMEMBERED
。此外,还有一种为2.0版本添加的新方法 - 使用Closure及其中的任意Groovy代码,但这与角色名称无关。
查询每个登记选民以确定他们是否“支持”(即可投票)这些代币。逻辑目前相当简单 - “IS_AUTHENTICATED _...”字符串由一个选民处理,以“ROLE_”开头的字符串由另一个处理,其他所有字符串都被假定为SPeL表达式。
说实话,我认为,因为角色必须在启动时“注册”(以指定注释中每个角色允许的访问规则,Config.groovy
等)角色选民可以做的不仅仅是检查字符串是否以某个前缀开头 - 它可以查看其已知角色名称的集合。因此,为2.0版本添加对自定义角色前缀的支持可能不会太多工作,我将研究它。但是现在,除了这个例外之外,插件尽可能地以各种方式进行定制。