我无法获得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框架(这需要一些努力)。