2

私は Grails を使用するかなり大規模な Web アプリケーションに取り組んでおり、ロール セキュリティの使用を実装しようとしています。システムがセットアップされたとき、grails は基本的に CAS 認証済みユーザーにフル ロール アクセスを許可していましたが、コントローラー メソッドごとに特定のロールを作成すると、ロールが完全に無視され、認証済みユーザーにフル アクセスが許可され続けました。

Config.groovy で行っていることは次のとおりです。

grails.plugins.springsecurity.securityConfigType = SecurityConfigType.InterceptUrlMap
grails.plugins.springsecurity.interceptUrlMap = [
    "/controllerName/create":                       [ "hasRole( 'ROLE_CREATE' )" ],
    "/controllerName/remove":                       [ "hasRole( 'ROLE_DELETE' )" ],
    "/controllerName/listEntries":                  [ "hasRole( 'ROLE_VIEW' )" ],
    "/controllerName/listAllEntries":               [ "hasRole( 'ROLE_VIEW' )" ],
    "/controllerName/getDefaultCategories":         [ "hasRole( 'ROLE_VIEW' )" ]
]

UrlConfig.goovy に controllerName のエントリがありません。

controllerName の create、remove、またはその他のサービスがアプリケーションによって呼び出される場合、ユーザーが指定されたロールを持っているかどうかは問題ではありません。そこにマッピングがないように機能します。

他の設定がinterceptUrlMapをオーバーライドしている可能性はありますか? もしそうなら、どこから見始めるべきですか?

Grails 1.3.8 を使用する必要があることに言及する必要があります。

更新: 以下で説明する小文字を試してみましたが、それでも失敗しました。ただし、トップ レベル ("/controllername/**") のコントローラー エントリを実行すると (コントローラー内でアクションを指定するのではなく、アクセスが制限されます。残念ながら、"/controllername/create" タイプのセキュリティを実行したいと考えています。何かご意見は?

4

2 に答える 2

2

URL は小文字でなければなりません。起動時に警告が表示されるはずです。「controllerName」を「controllername」に、「listAllEntries」を「listallentries」などに変更します。

于 2012-12-19T01:12:47.410 に答える
0

このようにする必要があります。これが私の例です: *はそのコントローラー内のすべてのアクションを意味することに
注意してください

grails.plugins.springsecurity.interceptUrlMap = [
   '/secure/create':    ['ROLE_ADMIN'],
   '/finance/***':   ['ROLE_FINANCE', 'IS_AUTHENTICATED_FULLY'],
   '/js/**':        ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/css/**':       ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/images/**':    ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/*':            ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/login/**':     ['IS_AUTHENTICATED_ANONYMOUSLY'],
   '/logout/**':    ['IS_AUTHENTICATED_ANONYMOUSLY']
]
于 2013-04-03T16:48:20.830 に答える