6

मैं 3 मॉडल [उपयोगकर्ता, भूमिका, और UserRole]भूमिका आधारित मॉडल सूची के साथ प्राधिकरण

 
Use {ID [PK], Name, Email, Password, .....} 
Role {ID [PK], Name, Description, .......} 
UserRole {UserID [FK], RoleID [FK]} 

पर विचार किया है, नियंत्रक पर भूमिका आधारित प्राधिकरण का उपयोग कर [अधिकृत] को निर्दिष्ट विशेषता है कि उपयोगकर्ता चाहिए वर्ग

[Authorize(Roles = "Administrator")] 
public class PageController : Controller 
{ 
    // Controller code here 
} 

यह ठीक है, मैं क्या जरूरत है किसी भी नियंत्रक कार्रवाई का उपयोग करने के प्रशासक भूमिका में,

वहाँ करने के लिए अपने रोल संग्रह आवंटित करने के लिए [Authoriz कोई तरीका है ई] विशेषता? उदाहरण के लिए

मैं उपयोगकर्ता में लॉग इन से असाइन की गई भूमिकाएं प्राप्त करूंगा और इसे सूची में संग्रहीत करूंगा। क्या यह सूची [अधिकृत] विशेषता को असाइन करना संभव है? कुछ इस प्रकार है:

[Authorize(Roles = MyDynamicallyLoadedList)] 
public class PageController : Controller 
{ 
    // Controller code here 
} 
+0

1+, वोट दें, अच्छा सवाल .... –

उत्तर

1

ठीक है, दो समस्याएं।

सबसे पहले, आप एक विशेषता का पैरामीटर के रूप में सूची का उपयोग नहीं कर सकते हैं। आप इसके बजाय एक सरणी का उपयोग कर सकते हैं। http://msdn.microsoft.com/fr-fr/library/ms177221%28v=vs.100%29.aspx

दूसरा, गुण पैरामीटर के मान संकलन समय पर ज्ञात होना चाहिए: आपकी सूची की सामग्री केवल रनटाइम पर ही जानी जाएगी।

आप की तरह एक संदेश मिलेगा: typeof एक विशेषता पैरामीटर प्रकार

समाधान बनाने के लिए किया जाएगा की अभिव्यक्ति या सरणी निर्माण अभिव्यक्ति की गई विशेषता तर्क एक निरंतर अभिव्यक्ति होना चाहिए

, एक नया प्राधिकरण विशेषता (AuthorizeAttribute से विरासत), और ओवरराइड AuthorizedCore

एक उदाहरण (कि आप अपनी समस्याग्रस्त हो सकते हैं) here

1

हां पाया जा सकता है।

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     string[] rolelist = GetRoleListForUserFromAPI(User.Identity.Name); 
     HttpContext.Current.User = new GenericPrincipal(User.Identity, rolelist); 
     Thread.CurrentPrincipal = HttpContext.Current.User; 
    } 
} 
: Global.asax में

  1. अवहेलना PostAuthenticateRequest
  2. लोड db
  3. से भूमिकाओं एक नया GenericPrincipal
  4. करने के लिए Thread.CurrentPrincipal और HttpContext.Current.User

उदाहरण प्रिंसिपल निरुपित बनाएं

+0

क्या आप मुझे कुछ ट्यूटोरियल या ब्लॉग सुझा सकते हैं, इसलिए मैं चरण-दर-चरण –

+0

के साथ जा सकता हूं मैंने एक उदाहरण जोड़ा – jgauffin

+0

दोस्त, क्षमा करें, मैं इसके लिए बहुत नया हूं, क्या आप कृपया मुझे थोड़ा अधिक विस्तृत उदाहरण प्रदान कर सकते हैं? और यह नियंत्रक की [अधिकृत] विशेषता पर कैसे लागू किया जा सकता है? –

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