2009-12-02 22 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 
... 
} 

अग्रिम धन्यवाद:

यहाँ grails उदाहरण (सादा जावा लेकिन वाक्य रचना के लिए आम तौर पर एक ही है)।

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 
} 

एक अद्यतन जवाब कर सकते हैं

+2

यह थोड़ा अस्पष्ट है कि तुम क्या कह रहे हैं है। आप उपरोक्त कोड की तुलना में कुछ "सुंदर" ढूंढ रहे हैं? क्या आपके द्वारा प्रदान की जाने वाली स्निपेट आपके लिए काम करती है? –

+0

वह पंक्ति एक उदाहरण था जो मुझे सटीक रूप से दिखाने के लिए थी। अगर कोई ग्रिटेड (उपयोगकर्ता, भूमिकाएं) कोई फ़ंक्शन नहीं है। – bezmax

उत्तर

9

मुझे लगता है, अपने उपयोगकर्ता डोमेन वर्ग इस तरह से अपनी भूमिका वर्ग के लिए एक hasMany refernece रखती है here मिलें।

+1

वर्तमान उपयोगकर्ता के प्रवेश की जांच करने के लिए इस तकनीक का उपयोग करने के लिए: डीईएफ़ authenticateService डीईएफ़ pricipalInfo = authenticateService.principal() डीईएफ़ उपयोगकर्ता = 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

द्वारा प्रतिस्थापित किया गया है क्या यह स्टीफन के उत्तर के समान नहीं है? – bezmax

+0

@bezmax लगभग, बारीकी से देखो, User.get (1) को कॉल करना आवश्यक नहीं है, Grails 2.4.4 के साथ परीक्षण किया गया है। – bitsnaps

+0

ठीक है, सवाल का हिस्सा था 'अगर कुछ विशिष्ट उपयोगकर्ता (जो लॉग इन नहीं है) '। – bezmax

संबंधित मुद्दे