権限ベースのアクセス制御as discussed in this postを実装したいと考えています。Grailsでパーミッションベースのアクセス制御を実装する方法は?
私は実装に精通していません - これを最初から最後まで実装する方法の詳細な例はありますか?
権限ベースのアクセス制御as discussed in this postを実装したいと考えています。Grailsでパーミッションベースのアクセス制御を実装する方法は?
私は実装に精通していません - これを最初から最後まで実装する方法の詳細な例はありますか?
Spring security pluginを見ましたか? Main docs are here
this postのように、Shiroプラグインも検討することができます。私は春のセキュリティプラグインがよりシンプルだが、志郎さんはポストで議論されているようないくつかの利点を持っています。
私はちょうどこれを解決しました(ほとんど)ので、ここで参考にします。このソリューションは、セキュリティドメインモデルは、記事で説明したように、あなたが最終的にこれらのドメインを持つことになりますので、あなたは、あなたのセキュリティドメインクラスをモデル )の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')"])
を書くには、ポストのためにありがとうございました!実際には、私は現在、春のセキュリティコアプラグインを使用しています。私がやりたかったのは、ロールベースのアクセス制御ではなく、アクセス権ベースの実装でした。しかし、これまでのところ、完全に実装する方法を見つけることはできません。 – chemilleX3
申し訳ありませんがあなたの質問を誤解しました。面白い投稿では、基本的なユーザー/ロールドメインモデルを拡張し、カスタムのUserDetailsServiceを実装する必要があると思います。物事は複雑に見えますが、本当にそれが必要な場合は、解決策が滑らかになります。 – Steve
ありがとうSteve!自分の懸念と関連してUserDetailsServiceを使用する方法の例を投稿できますか?それは大きな助けになるでしょう!ありがとう! – chemilleX3