asp.net MVC 4: User.IsInRole()总是返回false



我无法获得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()是微软推荐的正确和唯一的方法。

有人明白了吗?

您使用的是SimpleMembershipProvider,而不是Asp。网络身份框架。User.IsInRole()与身份配合良好,但我不确定它是否会与simplemmembershipprovider一起工作。

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

相关内容

  • 没有找到相关文章

最新更新