2009-12-02 19 views
9

特定のユーザー(ログインしていないユーザー)が特定の役割を持っているかどうかを確認する方法がありますか?事前に特定のユーザーにロールがあるかどうかを確認する

def user = User.get(1) //Get user with id 1 
if (ifAnyGranted(user,"ROLE_ADMIN")) { //This is the line I need to implement somehow 
... 
} 

ありがとう:ここ

は(プレーンJavaしかし構文については、一般的に同じ)Grailsの一例です。

私が想定し
+2

あなたが何を求めているのかは少し不明です。あなたは上記のコードよりも "かわいい"ものを探していますか?あなたが提供するスニペットはあなたのために働いていますか? –

+0

その行は、私が必要とするものを正確に示す例でした。関数ifAnyGranted(user、roles)はありません。 – bezmax

答えて

9

、あなたのユーザードメインクラスは、このようなあなたの役割クラスにhasManyののreferneceを保持している:

class User { 
    static hasMany = [authorities: Role] 
    //.... 
} 
class Role { 
    static belongsTo = User 
    String description 
    String authority 
    //.... 
} 

だから、役割・チェック用のコードは単純です:

User user = User.get(1) 
if (user.authorities.any { it.authority == "ROLE_ADMIN" }) { 
    // user is a admin 
} 

更新解答することができます見つけられるhere

+1

は、ユーザに現在ログインを確認するために、この技術を使用すること: DEF authenticateService DEF pricipalInfo = authenticateService.principal() DEFユーザー= User.findByUsername(pricipalInfo.username)を (user.authorities.any {ばなら。権限== "ROLE_ADMIN"}){ //ユーザーは管理者 } –

3

あなたは春のセキュリティプラグインを使用し、現在ログインしているユーザーをチェックしたい場合:私はあなたが現在ログインしているユーザーを確認したいと小文字

import org.codehaus.groovy.grails.plugins.springsecurity.AuthorizeTools 

. . . 

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){ 
       //user is an admin 
} 
+0

ログインしたユーザーの問題ではないことに気がつきました。これはとにかく便利だと思っています。 –

+1

これは古い答えですが、AuthorizeToolsがSpringSecurityToolsに置き換えられているようです – David

4
if (grails.plugin.springsecurity.SpringSecurityUtils.ifAllGranted("ROLE_ADMIN")) 
{ 
    ... 
} 
0

を、あなたは必要ありません。あなたはすでにspringSecurityServiceを注入しているので、ユーザードメインを照会することができます。

def springSecurityService 

def someAction(){ 
    if (principal.authorities.any { it.authority == 'ROLE_ADMIN'}){ 
     //... 
    } else { 
     //... 
    } 
} 
+0

これはStefanの答えと同じではありませんか? – bezmax

+0

@bezmaxほとんどの場合、User.get(1)の呼び出しは不要で、Grails 2.4.4でテストされています。 – bitsnaps

+0

さて、質問の一部は '特定のユーザー(ログインしているユーザーではない場合) 'でした。 – bezmax

関連する問題