我无法让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()
是微软推荐的唯一方法。
有人有个主意吗?
答案 0 :(得分:0)
您使用的是SimpleMembershipProvider,而不是Asp.Net Identity框架。 User.IsInRole()
适用于Identity,但我不确定它是否适用于SimpleMembershipProvider。
我担心你必须坚持使用适合你的方法:Roles.IsUserInRole
。除非你想要更新到Identity框架(这需要付出一些努力)。