3

Grails2.0.1でspringsecurityプラグインを使用しています。私の役割階層とその他のs2プロパティを以下に示します。

grails.plugins.springsecurity.userLookup.userDomainClassName = 'myApp.security.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'myApp.security.UserRole'
grails.plugins.springsecurity.authority.className = 'myApp.security.Role'
grails.plugins.springsecurity.successHandler.defaultTargetUrl="/index"
grails.plugins.springsecurity.securityConfigType = "Annotation"

//grails.plugins.springsecurity.rejectIfNoRule = true
grails.plugins.springsecurity.roleHierarchy = '''
    ROLE_ADMIN > ROLE_OWNER_TRANSFER_PRIVILEGE
    ROLE_OWNER_TRANSFER_PRIVILEGE > ROLE_OWNER
    ROLE_OWNER > ROLE_USER_WRITE
'''

ドキュメントによると、@ secureアノテーションでROLE_USER_WRITEが許可されている場合は、他のすべてのロールにもアクセスを許可する必要があります。同様に、タグを使用する場合、ROLE_OWNER、ROLE_OWNER_TRANSFER_PRIVILEGE、およびROLE_ADMINはtrueに等しくなければなりません。しかし、これは機能しません。代わりに、各役割をリストする必要があります。デバッグログを確認したところ、こんな感じです

2012-06-01 09:28:14,802 [pool-5-thread-1] DEBUG hierarchicalroles.RoleHierarchyImpl  - setHierarchy() - The following role hierarchy was set: 
        ROLE_ADMIN > ROLE_OWNER_TRANSFER_PRIVILEGE
        ROLE_OWNER_TRANSFER_PRIVILEGE > ROLE_OWNER
        ROLE_OWNER > ROLE_USER_WRITE

2012-06-01 09:28:14,802 [pool-5-thread-1] DEBUG hierarchicalroles.RoleHierarchyImpl  - buildRolesReachableInOneStepMap() - From role ROLE_ADMIN one can reach r
ole ROLE_OWNER_TRANSFER_PRIVILEGE in one step.
2012-06-01 09:28:14,802 [pool-5-thread-1] DEBUG hierarchicalroles.RoleHierarchyImpl  - buildRolesReachableInOneStepMap() - From role ROLE_OWNER_TRANSFER_PRIVIL
EGE one can reach role ROLE_OWNER in one step.
2012-06-01 09:28:14,802 [pool-5-thread-1] DEBUG hierarchicalroles.RoleHierarchyImpl  - buildRolesReachableInOneStepMap() - From role ROLE_OWNER one can reach r
ole ROLE_USER_WRITE in one step.
2012-06-01 09:28:14,803 [pool-5-thread-1] DEBUG hierarchicalroles.RoleHierarchyImpl  - buildRolesReachableInOneOrMoreStepsMap() - From role ROLE_ADMIN one can 
reach [ROLE_OWNER_TRANSFER_PRIVILEGE, ROLE_USER_WRITE, ROLE_OWNER] in one or more steps.
...

役割階層が作成されているように見えますが、アプリケーションの実行中は強制されません。何が間違っているのですか?ドキュメントに従ってこれを機能させるにはどうすればよいですか?

4

1 に答える 1

1

roleHierarchiesが機能するには、完全なツリー構造が必要です。私の質問では、階層の半分を表現しましたが、それは不完全なツリー表現であることがわかりました。何かのようなもの :

ROLE_ADMIN > ROLE_OWNER_TRANSFER_PRIVILEGE
ROLE_OWNER_TRANSFER_PRIVILEGE > ROLE_OWNER
ROLE_OWNER > ROLE_USER_WRITE
ROLE_USER > ROLE_READ

ここで、ROLE_USERとROLE_USER_WRITEは階層の切断されたサブツリーであり、Spring Securityは、当然のことながら、アクセス許可を解決するときにこれを解決できませんでした。

于 2012-06-11T12:20:14.210 に答える