Je suis en train de mettre en œuvre mon propre attribut personnalisé où je dois chercher tous les rôles pour l'utilisateur actuel comme celui-ci:indisponible Roles.GetRolesForUser dans l'autorisation personnalisée attirbute
public class CustomRoleAuthorization: System.Web.Mvc.AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/Login");
return;
}
var requiredRoles = Roles.Split(Convert.ToChar(",")).ToList();
var userRoles = Roles.GetRolesForUser(filterContext.HttpContext.User.Identity.Name);
foreach (var item in requiredRoles)
{
if (!filterContext.HttpContext.User.IsInRole(item))
{
filterContext.Result = new RedirectResult("~/Index/Index");
return;
}
}
}
}
Mais pour une raison quelconque cette ligne ne fonctionne pas fonctionne:
var userRoles = Roles.GetRolesForUser(filterContext.HttpContext.User.Identity.Name);
il dit que la propriété des rôles est une chaîne et qu'elle ne contient pas une méthode GetRolesForUser?
Comment puis-je ajouter cette méthode d'extension à mon projet pour que je puisse obtenir tous les rôles utilisateur à partir de l'identité lors de la connexion?
@Stephen voici comment je définir les rôles lors de la connexion:
if (user.PasswordHash == PasswordSecurity.CreatePasswordHash(model.Password, user.PasswordSalt))
{
ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, model.Email));
List<Claim> claims = new List<Claim>();
var roles = user.UserRoles.Where(x=>x.Active==true).ToList();
foreach (var item in roles)
{
claims.Add(new Claim(ClaimTypes.Role, item.Roles.RoleName));
}
identity.AddClaims(claims);
identity.AddClaim(new Claim(ClaimTypes.Name, model.Email));
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddHours(3) }, identity);
return Json("ok");
}
Salut Stephen, merci beaucoup pour la réponse! Au fait, j'ai fait ce que vous venez d'écrire, et par conséquent j'obtiens: {string [0]}? On dirait que je ne définis pas les rôles correctement ou ...? – User987
Il suggère que vous n'avez aucun rôle pour l'utilisateur connecté (mais je ne sais pas s'il pourrait y avoir d'autres raisons pour lesquelles il pourrait retourner un tableau vide.) –
J'ai modifié ma question avec comment j'ajoute les rôles utilisateur – User987