भूमिका प्रबंधक सुविधा सक्षम नहीं की गई है


192

निम्नलिखित प्रदाता प्राप्त करें :

भूमिका प्रबंधक सुविधा सक्षम नहीं की गई है।

अब तक सब ठीक है।

क्या कहीं एक विधि है जिसे यह जांचने के लिए बुलाया जा सकता है कि भूमिका प्रबंधक सक्षम किया गया है या नहीं?

जवाबों:


302

आप बूलियन प्रॉपर्टी से पढ़कर ऐसा कर सकते हैं:

System.Web.Security.Roles.Enabled

यह तत्व की enabledविशेषता से प्रत्यक्ष रूप से पढ़ा roleManagerजाता है web.config:

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>


अद्यतन:
अधिक जानकारी के लिए, इस MSDN नमूने की जाँच करें: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx


1
मैं इसके बजाय कोड से कैसे कर सकता हूं web.config? मैंने इसे डालने की कोशिश की Application_Startऔर यह कहता हैThis method can only be called during the application's pre-start initialization phase.
मास्लो

1
यह web.config में कहां जाता है?
मैट कोनोली

17
Web.config roleManager से ऊपर जोड़ने के बाद सक्षम किया गया है। लेकिन अब मुझे अपवाद मिल रहा हैUnable to connect to SQL Server database
इरफान युसानीफ

2
@Infotekka "SQL सर्वर डेटाबेस से कनेक्ट करने में असमर्थ" त्रुटि।
जैक

2
वाह, यह एक महान जवाब है, मुझे कुछ भी कॉन्फ़िगर करने की आवश्यकता नहीं है, बस एक आकर्षण की तरह काम करता है। एक बार web.config में कॉन्फ़िगर हो जाने के बाद, मैं सिर्फ यह देख सकता हूं कि क्या User.dentity.IsAuthenticated यह देखने के लिए कि लॉगिन उपयोगकर्ता प्रमाणित है या नहीं। तो शांत asp.net
क्वान

52

यदि आप यहां इसलिए पहुंचे क्योंकि आप नए का उपयोग कर रहे हैं ASP.NET Identity UserManager, तो आप वास्तव में क्या देख रहे हैं RoleManager:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

roleManager आपको यह देखने के लिए एक्सेस देगा कि क्या भूमिका मौजूद है, बनाएं, आदि, और इसके लिए बनाई गई है UserManager


73
3 साल की उम्र का किसी भी चीज से क्या लेना-देना है? मुझे Google से इस पद पर ले जाया गया क्योंकि मैं पहचान स्थापित करने के मुद्दे से निपट रहा था। चूँकि मैंने इसका पता लगाया ... उसी मुद्दे से जूझने वाला अगला व्यक्ति जो मुझे Google द्वारा यहाँ लाया जाता है, वह जानता है कि क्या करना है ...
Serj Sagan

1
इसके अलावा, पहचानकर्ता UserManager के पास दिए गए उपयोगकर्ता के लिए भूमिकाएँ प्राप्त करने के लिए एक उपयोगी सुविधा है: UserManager.GetRolesAsync (User.Identity.GetUserId ());
कीथल8041 22

जहाँ आप var roleManager = new RoleManager <IdentityRole> (नया रोलस्टोर <IdentityRole> (new ApplicationDbContext ())) डालते हैं; ?
मारियो एम

आप इसे ऐप में कहीं भी कर सकते हैं। आपको स्पष्ट रूप से कुछ संदर्भों को हल करने की आवश्यकता होगी, लेकिन कहीं भी आपको पहचान ऐप में भूमिकाएं चाहिए, आप इस कथन का उपयोग कर सकते हैं।
सर्ज सागर

11

मैंने Google के माध्यम से कहीं और 2 सुझाव दिए हैं जो यह सुझाव देता है कि a) यह सुनिश्चित करते हुए कि आपका db कनेक्शनस्ट्रिंग (जो Roles का उपयोग कर रहा है) सही है और यह कि इसकी कुंजी सही वर्तनी है, और b) कि भूमिका प्रबंधक पर सक्षम ध्वज को सही पर सेट किया गया है। आशा है कि उन लोगों में से एक मदद करता है। इसने मेरे लिए किया।

क्या आपने Roles.Enabled की जाँच करने का प्रयास किया? इसके अलावा, आप रोल्स चेक कर सकते हैं। यह देखने के लिए कि कितने प्रदाता उपलब्ध हैं और आप डिफ़ॉल्ट प्रदाता के लिए रोल्स.प्रोवाइडर की जांच कर सकते हैं। यदि यह अशक्त है तो एक नहीं है।


आपको जवाब के लिए धन्यवाद। लेकिन यह वह नहीं है जो मैं चाहता हूं। मुझे ऐसा तरीका चाहिए, जो यह सुनिश्चित करे कि भूमिका प्रबंधक सुविधा सक्षम है या नहीं, उस उद्देश्य के लिए प्रदाताप्रतिस्पर्धा को कैशिंग किए बिना।
gsharp

8

इसमें उल्लिखित अपवाद के कारण मुझे यह प्रश्न मिला। मेरे Web.Config का कोई <roleManager>टैग नहीं था । मुझे एहसास हुआ कि भले ही मैंने इसे जोड़ा (जैसा कि इन्फोटेका ने सुझाव दिया था ), यह एक डेटाबेस अपवाद में समाप्त हो गया। यहां अन्य उत्तरों में सुझावों का पालन करने के बाद, किसी ने भी समस्या को पूरी तरह से हल नहीं किया।

चूंकि ये Web.Config टैग स्वचालित रूप से उत्पन्न हो सकते हैं, इसलिए इसे मैन्युअल रूप से जोड़कर हल करना गलत लगा। यदि आप इसी तरह के मामले में हैं, तो वेब पर आपके द्वारा किए गए सभी परिवर्तनों को हटा दें। Config और Visual Studio में:

  1. प्रेस Ctrl+ Q, नगेट टाइप करें और " नूगेट पैकेज प्रबंधित करें" पर क्लिक करें;
  2. प्रेस Ctrl+ E, प्रदाताओं को टाइप करें और सूची में इसे "Microsoft ASP.NET यूनिवर्सल प्रोवाइडर कोर लाइब्रेरीज़ " और "Microsoft ASP.NET यूनिवर्सल प्रोवाइडर्स फॉर लोकलडीबी " (दोनों Microsoft द्वारा बनाए गए) को दिखाना चाहिए ;
  3. उन दोनों में इंस्टॉल बटन पर क्लिक करें और NuGet विंडो बंद करें;
  4. अपने Web.config की जांच करें और अब आपके पास प्रोफ़ाइल , सदस्यता , सत्र टैग्स के अंदर और साथ ही नए भूमिका प्रबंधक टैग के <providers>अंदर कम से कम एक टैग होना चाहिए :

    <roleManager defaultProvider="DefaultRoleProvider">
        <providers>
           <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" />
        </providers>
    </roleManager>
  5. ऐसे जोड़ें enabled="true":

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
  6. F6निर्माण करने के लिए दबाएँ और अब उस अपवाद के बिना डेटाबेस अद्यतन के लिए आगे बढ़ना ठीक होना चाहिए:

    1. प्रेस Ctrl+ Q, टाइप मैनेजर , "पैकेज मैनेजर कंसोल" पर क्लिक करें;
    2. प्रकार update-database -verboseऔर बीज विधि ठीक चलेगी (यदि आपने कहीं और गड़बड़ नहीं की है) और अपने डेटाबेस में कुछ तालिकाओं का निर्माण करें;
    3. प्रेस Ctrl+ W+ Lसर्वर Explorer खोलने के लिए और आप में जांच करने के लिए सक्षम होना चाहिए डाटा कनेक्शन> DefaultConnection> टेबल्स भूमिकाओं और UsersInRoles नव निर्मित टेबल के बीच में टेबल!

1
" चूंकि Web.Config फ़ील्ड स्वचालित रूप से उत्पन्न होते हैं " यह पूरी तरह से सही नहीं है। जबकि कई NuGet संकुल स्वतः ही विन्यास फाइल को समायोजित कर देंगे, ऐसा करने के लिए उन्हें कोई आवश्यक नियम नहीं है।
केविन आर।

यह पूर्ण है। Thnx
sapatelbaps

6

यदि आप उपयोग कर रहे हैं तो आप ASP.NET Identity UserManagerइसे इस तरह भी प्राप्त कर सकते हैं:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

यदि आपने उदाहरण के लिए गाइड से इंट में उपयोगकर्ता के लिए कुंजी बदल दी है तो इस कोड का उपयोग करें:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());

इसने मेरे लिए काम किया। कृपया कहें कि यदि आप नीचे मतदान कर रहे हैं।
ओग्लस

यह काम नहीं करता है क्योंकि आपको उपयोगकर्ता को इस तरह से जोड़ने की आवश्यकता है: userManager.GetRoles (Convert.ToInt32 (User.Identity.GetUserId <int> ()));
खिलौना

@toy नहीं, <int> को int के रूप में मान मिलेगा। बदलने की जरूरत नहीं। बेशक इसके लिए काम करने के लिए आइडेंटिटी की को इंट की जरूरत है।
ओग्लास

-1
<roleManager
  enabled="true"
  cacheRolesInCookie="false"
  cookieName=".ASPXROLES"
  cookieTimeout="30"
  cookiePath="/"
  cookieRequireSSL="false"
  cookieSlidingExpiration="true"
  cookieProtection="All"
  defaultProvider="AspNetSqlRoleProvider"
  createPersistentCookie="false"
  maxCachedResults="25">
  <providers>
    <clear />
    <add
       connectionStringName="MembershipConnection"
       applicationName="Mvc3"
       name="AspNetSqlRoleProvider"
       type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <add
       applicationName="Mvc3"
       name="AspNetWindowsTokenRoleProvider"
       type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </providers>
</roleManager>

-1

यहां वह कोड है जिसे आपको अपने अकाउंट कंट्रोलर को MVC5 में डालने और बाद में किसी उपयोगकर्ता की भूमिकाओं की सूची प्राप्त करने की आवश्यकता है:

csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }

Roles.GetRolesForUser()भूमिका प्रबंधक सुविधा का उपयोग करने और सक्षम करने की आवश्यकता नहीं है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.