0

这是我第一次使用 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>

任何帮助将不胜感激。

4

1 回答 1

0

我自己刚刚解决了这个问题,可能是你遇到了同样的问题。

就我而言,我的 web.config 有点错误。确保您的个人资料提供者、成员提供者和角色管理器的applicationName参数在每种情况下都相同。我在其中一个中有错字,这意味着看起来好像在那里的用户实际上是针对不同的应用程序的,所以当我调用 AddUserToRole 时,它​​抛出了一个异常。

于 2017-02-03T16:18:35.007 回答