2009-12-02 18 views
9

numaralı bir role sahip olup olmadığını kontrol etme Bazı belirli kullanıcıların (giriş yapan değil) belirli bir rolünün olup olmadığını kontrol etmek için iyi bir yol var mı? peşinBelirli bir kullanıcının

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

Teşekkür: Burada

(düz Java ancak sözdizimi için genel olarak aynı) grails örnektir.

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

Yani rol denetimi için kod basittir:

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

güncellenmiş cevap olabilir varsayıyorum

+2

ne soruyorsunuz belli değil. Kodun üzerinde "güzel" bir şey mi arıyorsunuz? Sağladığınız snippet sizin için çalışıyor mu? –

+0

Bu çizgi tam olarak neye ihtiyacım olduğunu gösteren bir örnekti. IfAnyGranted (kullanıcı, roller) işlevsizdir. – bezmax

cevap

9

, Kullanıcı alanı sınıfı bu gibi Rolü sınıfına bir hasMany refernece tutan here bulundu.

+1

giriş yapan kullanıcılar akım kontrol etmek için bu tekniği kullanmak için: def authenticateService def pricipalInfo = authenticateService.principal() def user = User.findByUsername (pricipalInfo.username) (user.authorities.any {eğer o. otorite "ROLE_ADMIN"}) { // kullanıcı –

3

Bahar Güvenlik Plugin kullanarak ve giriş yapan kullanıcılar akım kontrol etmek istiyorsanız: Sana giriş yapan kullanıcılar akım kontrol etmek istiyorum harf

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

. . . 

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

Sadece soru kullanıcı oturum hakkında spesifik değildi fark bir yönetici } olduğunu ==. Umarım bu zaten yararlıdır. –

+1

Bunun eski bir cevap olduğunu anlıyorum ama AuthorizeTools'un yerini SpringSecurityTools'un yerine koymuş gibi görünüyor. – David

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

, sana ihtiyacım yok Kullanıcı etki alanını sorgulamak için, springSecurityService 'yi zaten enjekte ettiniz, bu yüzden sadece şu şekilde yazabilirsiniz:

+0

Bu, Stefan'ın cevabı ile aynı değil mi? – bezmax

+0

Bezmax neredeyse, yakından bakın, çağıran User.get (1) gerekli değildir, Grails 2.4.4 ile test edilmiştir. – bitsnaps

+0

Evet, sorunun bir kısmı "belirli bir kullanıcı (oturum açmış değil)" idi. – bezmax

İlgili konular