这是我第一次使用RoleManager,我在向角色添加用户名时遇到问题。目标是检查用户(当前登录的用户)是否为管理员(SQL数据库中为isAdmin = 1
)。我在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();
始终显示为null。
if(!Roles.IsUserInRole(usr.UserName, "Admin"))
,因此当前未将该用户分配给该角色,但我在下一行收到了ProviderException,附加信息为:“找不到用户”_username“。
My Web Config以防任何人需要它:
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear />
<add name="MyRoleProvider" type="System.Web.Providers.DefaultRoleProvider"
connectionStringName="StoreFrontConnectionString" applicationName="/"/>
</providers>
</roleManager>
非常感谢任何帮助。
答案 0 :(得分:0)
我自己只是解决了这个问题,可能是你遇到了同样的问题。
在我的情况下,我的web.config有点错误。确保配置文件提供程序,成员资格提供程序和角色管理器的 applicationName 参数在每种情况下都相同。我在其中一个中输入了一个拼写错误,这意味着看起来的用户就好像它实际上是用于不同的应用程序一样,所以当我调用AddUserToRole时它会抛出异常。