2012-04-24 15 views

答えて

0

Spring security pluginを見ましたか? Main docs are here

this postのように、Shiroプラグインも検討することができます。私は春のセキュリティプラグインがよりシンプルだが、志郎さんはポストで議論されているようないくつかの利点を持っています。

+0

を書くには、ポストのためにありがとうございました!実際には、私は現在、春のセキュリティコアプラグインを使用しています。私がやりたかったのは、ロールベースのアクセス制御ではなく、アクセス権ベースの実装でした。しかし、これまでのところ、完全に実装する方法を見つけることはできません。 – chemilleX3

+0

申し訳ありませんがあなたの質問を誤解しました。面白い投稿では、基本的なユーザー/ロールドメインモデルを拡張し、カスタムのUserDetailsS​​erviceを実装する必要があると思います。物事は複雑に見えますが、本当にそれが必要な場合は、解決策が滑らかになります。 – Steve

+0

ありがとうSteve!自分の懸念と関連してUserDetailsS​​erviceを使用する方法の例を投稿できますか?それは大きな助けになるでしょう!ありがとう! – chemilleX3

0

私はちょうどこれを解決しました(ほとんど)ので、ここで参考にします。このソリューションは、セキュリティドメインモデルは、記事で説明したように、あなたが最終的にこれらのドメインを持つことになりますので、あなたは、あなたのセキュリティドメインクラスをモデル )のGrails 2.2.4と春のセキュリティ2.0 RC

1で動作します: - 許可を - 役割 - RolePermissionに - ユーザー - のUserRole

2)あなたは、あなたのUserクラスはgetAuthorities()メソッドでは、当局としての権限の代わりの役割を返すことを確認して、ユーザー のための当局の照会:

/** 
    * Gets authorities for the user. 
    * 
    * It will return all of the Permissions of the User assigned by the Roles 
    * which the User has 
    */ 
    Set<Permission> getAuthorities() { 

    Set allPermissions = [] 
    // Collect all Roles of the User 
    UserRole.findAllByUser(this).each { userRole -> 
     // Collect all Permissions from the Role 
     Role role = userRole.role 
     // Returning the collected permissions 
     RolePermission.findAllByRole(role).each { rp -> 
     allPermissions.add(rp.permission) 
     } 
    } 
    return allPermissions 
    } 

3)春のセキュリティコンフィグ

私は私のConfig.groovyで、この春のセキュリティ設定のための(非関連部分は省略)を有し

grails { 
    plugin { 
    springsecurity { 
     ...  
     userLookup { 
     userDomainClassName = 'limes.security.User' 
     } 
     authority { 
     nameField = 'name' 
     className = 'limes.security.Permission' 
     } 
     ... 
    } 
    } 
} 

一つの重要なハイライトがありますauthority.nameFieldはあなたのPermissionクラスに適合しなければなりません。私のモデル(と記事)では、name属性は「名前」と呼ばれています。

もちろん、PermissionクラスをUser.getAuthorities()の戻り値に合わせるためにauthority.classNameとして設定します。

4)上記溶液セキュリティ式で

を使用すると、「ROLE_」で始まるだけの権限名を使用することができますGrailsの春のセキュリティー・プラグインの制限を解決していません。

「PERM_PERMISSION1」のようなアクセス権を呼び出す場合は、コントローラの@Securedアノテーションと静的URLルールに注意してチェックするためにEL式を書く必要があります。

ので、代わりの

@Secured(["PERM_PERMISSION1"]) 

あなたは

@Secured(["hasRole('PERM_PERMISSION1')"]) 
関連する問題