2016-10-04 54 views
1

我无法获取User.IsInRole()的工作。ASPNET MVC 4:User.IsInRole()总是返回false

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
     { 
      string roleUser; 

      if (User.IsInRole("Administrateurs")) 
      { 
       roleUser = "Administrateurs"; 
      } 
      else if (User.IsInRole("Conseillers")) 
      { 
       roleUser = "Conseillers"; 
      } 
      else if (User.IsInRole("Demandeurs")) 
      { 
       roleUser = "Demandeurs"; 
      } 
      else 
      { 
       roleUser = "Erreur!"; 
      } 

      return (null); 
     } 

我的webconfig,看起来不错。

我定制了原来的AccountController按下面所有注册时,当或创建用户和分配角色似乎确定:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      bool erreur = false; 

      // Attempt to register the user 
      try 
      { 
       //************* Création du nouveau compte ******************** 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
       //WebSecurity.Login(model.UserName, model.Password); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       erreur = true; 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
      finally 
      { 
       //************* S'assurer que l'utilisateur a été créé ***************** 
       if (erreur == false) 
       { 
        try 
        { 
         //***************** Association du nouveau compte d'utilisateur avec le rôle ************* 
         RoleAddToUser(model.NomRole, model.UserName); 
         //***************** Association du nouveau compte d'utilisateur avec le demandeur/conseiller ************* 
         var i = db.spGetUsrID(model.UserName).ToArray(); 
         Conseillers_Demandeurs_Utilisateurs lienUtilDdeur_Cons = new Conseillers_Demandeurs_Utilisateurs() 
         { 
          UserId = (int)i[0], 
          Code_Demandeur_Conseiller = model.NomPersonne, 
          Actif_Inactif = true, 
          Dte_Saisie = DateTime.Now, 
          UserId1 = 1 //******************* UserId = loanDdeur.UserId; 
         }; 
         db.Conseillers_Demandeurs_Utilisateurs.Add(lienUtilDdeur_Cons); 
         db.SaveChanges();        
        } 
        catch (Exception e) 
        { 
         throw e; 
        } 
       } 
      } 
      return RedirectToAction("Account", "Register"); 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

/// <summary> 
    /// Add role to the user 
    /// </summary> 
    /// <param name="RoleName"></param> 
    /// <param name="UserName"></param> 
    /// <returns></returns> 
    [Authorize(Roles = "Administrateurs")] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult RoleAddToUser(string RoleName, string UserName) 
    { 
     string mag; 
     if (Roles.IsUserInRole(UserName, RoleName)) 
     { 
      //ViewBag.ResultMessage = "This user already has the role specified !"; 
      mag = "This user already has the role specified !"; 
     } 
     else 
     { 
      Roles.AddUserToRole(UserName, RoleName); 
      //ViewBag.ResultMessage = "Username added to the role succesfully !"; 
      mag = "Username added to the role succesfully !"; 
     } 

     //SelectList list = new SelectList(Roles.GetAllRoles()); 
     //ViewBag.Roles = list; 
     return Json(mag, JsonRequestBehavior.AllowGet); 
     //return View(); 
    } 

我可以看到我的SQL表的结果

随着一些搜索,我最终使用: Roles.GetRolesForUser(model.UserName)Roles.IsUserInRole(model.UserName, "Administrateurs")

这些工作,但我也看过User.IsInRole()是微软推荐的正确和唯一的方法。

有没有人有想法?

回答

0

您正在使用SimpleMembershipProvider,而不是Asp.Net Identity框架。 User.IsInRole()适用于Identity,但我不确定它是否可以与SimpleMembershipProvider一起使用。

恐怕您必须坚持适用您的方法:Roles.IsUserInRole。除非你喜欢更新到Identity框架(这需要付出一些努力)。