这是我第一次使用 RoleManager,我在为角色添加用户名时遇到问题。目标是检查用户(当前正在登录)是否是管理员(isAdmin = 1
在 SQL 数据库中)。我在我的 LoginController 中使用的是:
var usr = db.Users.Where(u => u.UserName.ToLower() == userLogin.UserName.ToLower() &&
u.Password.Equals(userLogin.Password, StringComparison.Ordinal)).FirstOrDefault();
if (usr != null)
{
FormsAuthentication.SetAuthCookie(usr.UserName, false);
if (usr.IsAdmin == true)
{
if(!Roles.RoleExists("Admin"))
Roles.CreateRole("Admin");
var x = Roles.GetAllRoles();
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
Roles.AddUserToRole(usr.UserName, "Admin");
}
return RedirectToAction("Index", "Home");
}
我在这些行中的每一行都设置了断点,并且Roles.CreateRole("Admin");
永远不会到达,这意味着有一个名为“Admin”的角色。但是,var x = Roles.GetAllRoles();
始终显示为空。
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
始终到达,因此该用户当前未分配给该角色,但我在下一行收到 ProviderException,附加信息为:“找不到用户“_username”。
我的网络配置以防万一有人需要它:
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear />
<add name="MyRoleProvider" type="System.Web.Providers.DefaultRoleProvider"
connectionStringName="StoreFrontConnectionString" applicationName="/"/>
</providers>
</roleManager>
任何帮助将不胜感激。