ASPNET MVC 4:User.IsInRole()始终返回false

时间:2016-10-04 23:00:59

标签: asp.net-mvc asp.net-mvc-4 asp.net-identity

我无法让User.IsInRole()工作。

    [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()是微软推荐的唯一方法。

有人有个主意吗?

1 个答案:

答案 0 :(得分:0)

您使用的是SimpleMembershipProvider,而不是Asp.Net Identity框架。 User.IsInRole()适用于Identity,但我不确定它是否适用于SimpleMembershipProvider。

我担心你必须坚持使用适合你的方法:Roles.IsUserInRole。除非你想要更新到Identity框架(这需要付出一些努力)。