您可以通过读取以下布尔属性来实现:
System.Web.Security.Roles.Enabled
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
更新:
更多信息请查看此MSDN示例:https://msdn.microsoft.com/zh-cn/library/aa354509(v=vs.110).aspx
如果您来到这里是因为您正在使用新的ASP.NET
Identity
UserManager
,实际上您要找的是RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
将让您可以访问到角色是否存在、创建等信息,此外它还是为了UserManager
而创建的。
我在Google上找到了两个建议,建议A是确保您的数据库连接字符串(角色使用的连接字符串)正确,并且键名拼写正确;建议B是确保RoleManager的Enabled标志设置为true。希望其中一个可以帮到你,对我有用。
您试过检查Roles.Enabled吗?还可以检查Roles.Providers查看有多少提供程序可用,以及检查默认提供程序的Roles.Provider。如果它为null,则没有提供程序。
ASP.NET Identity UserManager
,您也可以像这样获取它:var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
如果你已经把用户的key由Guid改成了Int,请使用以下代码:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
<roleManager>
标签。我意识到即使我添加了它(如Infotekka建议的),也会出现数据库异常。在遵循此处其他答案中的建议后,仍然无法完全解决该问题。Check your Web.config and now you should have at least one <providers>
tag inside Profile, Membership, SessionState tags and also inside the new RoleManager tag, like this:
<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>
Add enabled="true"
like so:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Press F6 to Build and now it should be OK to proceed to a database update without having that exception:
update-database -verbose
and the Seed method will run just fine (if you haven't messed elsewhere) and create a few tables in your Database;<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>
以下是你需要在MVC5及更高版本的Account Controller中放置的代码,以获取用户角色列表:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
无需使用Roles.GetRolesForUser()
并启用角色管理器功能。
web.config
中?我尝试将其放在Application_Start
中,但它显示“此方法只能在应用程序的预启动初始化阶段调用”。 - MaslowroleManager
被启用。但现在我遇到了“无法连接到SQL Server数据库”的异常。 - Irfan Y