尚未启用角色管理器功能

时间:2010-10-06 15:41:32

标签: c# asp.net roleprovider

获得以下ProviderException

  

尚未启用角色管理器功能。

到目前为止一切顺利。

是否有某个方法可以调用以检查角色管理器是否已启用?

7 个答案:

答案 0 :(得分:294)

您可以通过读取布尔属性:

来完成此操作
System.Web.Security.Roles.Enabled

这是enabledroleManager元素的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 :(得分:51)

如果您因为使用新的ASP.NET Identity UserManager而来到这里,那么您实际需要的是RoleManager

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

roleManager会让您有权查看该角色是否存在,创建等,还是为UserManager

创建的角色

答案 2 :(得分:11)

我在其他地方通过Google找到了2条建议a)确保你的数据库连接字符串(Roles正在使用的那个)是正确的,并且它的密钥拼写正确,并且b)RoleManager上的Enabled标志已设置为真。希望其中一个有所帮助。它确实适合我。

您是否尝试过检查Roles.Enabled?此外,您可以检查Roles.Providers以查看可用的提供程序数量,您可以检查默认提供程序的Roles.Provider。如果它为null则没有。

答案 3 :(得分:8)

我发现这个问题是由于其中提到的例外。我的Web.Config没有任何<roleManager>标签。我意识到,即使我添加它(作为Infotekka suggested),它最终也会出现在数据库异常中。在按照这里其他答案中的建议后,没有一个完全解决问题。

由于可以自动生成这些Web.Config标记,因此通过手动添加它们会感觉不对。如果您处于类似情况,请撤消对Web.Config和Visual Studio中所做的所有更改:

  1. Ctrl + Q ,输入 nuget ,然后点击“管理NuGet包”;
  2. Ctrl + E ,键入提供商,并在列表中显示“Microsoft ASP.NET Universal Providers Core库“和”Microsoft ASP.NET Universal Providers for LocalDB “(均由Microsoft创建);
  3. 单击其中的“安装”按钮并关闭NuGet窗口;
  4. 检查您的Web.config,现在您应该在个人资料会员 SessionState <中包含至少一个<providers>个标记

  5. 标签以及新的 RoleManager 标签内部,如下所示:

    <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>
    
  6. 像这样添加enabled="true"

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
    
  7. F6 进行构建,现在可以继续进行数据库更新而不会出现异常:

    1. Ctrl + Q ,键入经理,点击“程序包管理器控制台”;
    2. 键入update-database -verbose,种子方法运行正常(如果你没有搞乱其他地方)并在数据库中创建几个表格;
    3. Ctrl + W + L 打开服务器资源管理器,您应该能够检入数据连接&gt; DefaultConnection&gt;表新创建的表中的角色 UsersInRoles 表格!

答案 4 :(得分:5)

如果你使用的是ASP.NET Identity UserManager,你也可以这样做:

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

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

如果您已将用户的密钥从Guid更改为Int,例如使用以下代码:

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

答案 5 :(得分:-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>

答案 6 :(得分:-1)

这是您需要在MVC5及更高版本中的帐户控制器中放入的代码 获取用户角色列表:

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

无需使用Roles.GetRolesForUser()并启用Role Manager功能。