2013-11-21 9 views
18

मेरे पास एक एएसपी.नेट एमवीसी 5 एप्लीकेशन है। मैं उपयोगकर्ता और भूमिका प्रबंधन के लिए मानक एएसपी.NET पहचान प्रदाता का उपयोग कर रहा हूं। यह महत्वपूर्ण है कि मैं पहचान रिपोजर प्रोजेक्ट से पहचानकर्ता का उपयोग कर रहा हूं, लेकिन यह ठीक लगता है। मैं पंजीकरण, लॉगिन, उपयोगकर्ताओं को संपादित कर सकता हूं, और उनकी भूमिकाओं का प्रबंधन कर सकता हूं।एएसपी.नेट पहचान जांच उपयोगकर्ता भूमिकाएं काम नहीं कर रही हैं

मैं इन पंक्तियों के साथ भूमिका में उपयोगकर्ता को जोड़ने:

UserManager.AddToRole(userdetail.Id, r); 
db.Entry(userdetail).State = EntityState.Modified; 
db.SaveChanges(); 

यह डीबी स्तर में काम कर रहा है।

लेकिन, मुझे भूमिका आधारित प्रमाणीकरणों उपयोग नहीं कर सकते हैं, वास्तव में साधारण

HttpContext.User.IsInRole("Administrator") 

भी काम नहीं कर रहा है।

[Authorize(Roles="Administrator")] 

भी काम नहीं कर रहा है।

मैं इस विधि के साथ ही जांच कर सकते हैं, चाहे उपयोगकर्ता व्यवस्थापक हो:

UserManager.IsInRole(userID, "Administrator"). 

क्यों?

मुझे मिले हर ट्यूटोरियल में, सबकुछ ठीक काम करता है। विभिन्न परियोजना भंडार कारण हो सकता है? या एएसपी.नेट पहचान इतनी टूटी हुई है?

कृपया सलाह,

+3

मुझे एक ही समस्या है। कोई भी समाधान? – janhartmann

+0

उत्तर पोस्ट किया गया है। स्वीकार करें। Jd4u द्वारा एक। – DtechNet

उत्तर

13

कोई समस्या है।[डिजाइन द्वारा मुद्दा]

  • भूमिका नाम केस AuthorizeAttribute और User.IsInRole
  • में संवेदनशील होते हैं भूमिका नाम

इसके अलावा मामले UserManager.IsInRole में असंवेदनशील हैं, के लिए जाँच सत्यापन के लिए सही भूमिका का नाम उपयोग किया जाता है।

[उपरोक्त कोड नीचे दिए गए परीक्षण पर आधारित है। भूमिका का नाम = "व्यवस्थापक", उपयोगकर्ता भूमिका में जोड़ा जाता है "व्यवस्थापक"।]

[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/ 
public ActionResult Secured() 
{ 
    if (User.IsInRole("admin")) /*This is False*/ 
    { 
     Console.WriteLine("In"); 
    } 
    if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/ 
    { 
     Console.WriteLine("In"); 
    } 
    return View(); 
} 

हम [Authorize(Roles="admin")] को विशेषता बदलते हैं, तो यह पेज लॉगइन करने के लिए पुनर्निर्देश।

+0

क्या आपको पता है कि इस कारण को कैसे बाईपास करना है, मेरे पास एक ही समस्या है। मैं कस्टम उपयोगकर्ता और रोलेस्टोर का उपयोग करता हूं लेकिन मुझे अनुमान लगाया जाना चाहिए लेकिन यह प्रबंधक और एनोटेशन के माध्यम से प्रबंधक का उपयोग करके ठीक काम करता है। – Baserz

+0

इसने मेरे जीवन को बचाया मुझे नहीं पता कि यह जवाब क्यों स्वीकार नहीं किया गया था। कुछ भी इसका उल्लेख नहीं करता है। Google पर "पहचान उपयोगकर्ताइन्रोल" देखें और आपको गलत "User.IsInRole" दिखाई देगा <- काम नहीं करता !! निश्चित रूप से वे पुराने प्रश्न हैं और एएसपी.नेट एमवीसी 5 अब 2 साल पुराना है लेकिन ओह ठीक है। अगर कोई मूल एमवीसी 5 स्टैक प्रोग्रामिंग कर रहा है तो यह है! शायद .NET कोर के लिए भी काम करते हैं। – DtechNet

+0

इसमें केस संवेदनशीलता सिर्फ आपराधिक है, यह एक बग होना चाहिए। मैंने इसे अपने कोड में पाया और समय के अच्छे हिस्से को बर्बाद करने के बाद ही यह जवाब मिला। अपना जवाब उतारना! –

0

आप अपने web.config में इस प्रविष्टि है?

<roleManager enabled="true"> 
     <providers> 
      <clear /> 
      <add connectionStringName="ApplicationServices" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 

इसके अलावा, अगर मुझे सही याद है, तो .NET के विभिन्न संस्करणों में भूमिका प्रदाता असेंबली के लिए एक अलग नामस्थान है।

+9

क्या आप एएसपी.नेट एमवीसी 5 के बारे में एएसपी.नेट पहचान के साथ बात कर रहे हैं? – martonx

22

उस स्थिति में आपको लॉगआउट करने और उपयोगकर्ता को फिर से लॉगिन करने की आवश्यकता है।

क्योंकि भूमिकाओं में डेटा भी संग्रहीत किया जाता है, तो आपको कुकी को फिर से काम करने के लिए जारी करना होगा।

+2

आप सुरक्षा टिकट को अपडेट करके उपयोगकर्ता को लॉग इन और आउट करने के बिना भी वही चीज़ प्राप्त कर सकते हैं। Http://stackoverflow.com/a/19505060/110871 – Funka

+1

कूल जवाब देखें .... –

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