Vérifier efficacement déclaration de rôle
Je suis l'élaboration d'un Asp.NET MVC5 application web (.NET 4.6) et j'ai besoin de montrer quelques lignes de code HTML à un groupe d'utilisateurs avec une revendication particulière. J'ai vu quelques détaillé des solutions, mais je préfère le garder court, alors je suis venu avec cette
@{
if (System.Security.Claims.ClaimsPrincipal.Current.Claims.ToList().FirstOrDefault(c => c.Type == "role" && c.Value == "AwesomeUserRole") != null) {
<!-- my HTML goes here -->
}
}
Est-il une bonne façon de vérifier pour un utilisateur authentifié réclamation ou est-il préférable de respecter? Un nettoyant /solution plus efficace est la bienvenue.
Vous devez vous connecter pour publier un commentaire.
Parce que tous les
Identity
objets dans ASP.NET sont maintenant uneClaimsIdentity
, vous pouvez toujours lancer le courantIPrincipal
à unClaimsIdentity
:Mais il est effectivement plus facile de simplement utiliser
User.IsInRole("AwesomeUserRole")
Tant que vous n'avez pas modifié la configuration par défaut, les demandes de règlement avec le type de
role
sont automatiquement alimentés dans les rôles de collecte pour le thread principal.Si vous avez besoin de vérifier pour d'autres types de demandes d'indemnisation en plus de rôles, j'ai l'habitude de créer un ensemble de méthodes d'extension pour
IPrincipal
qui enveloppent les chèques de réclamation:Le bénéfice de l'extension de la méthode est que vous pouvez vérifier pour tout type de demande et le retourner toutes les valeurs qu'ils peuvent contenir, de ne pas simplement de savoir si ou non la demande existe.
claims with the type of role are automatically fed into the roles collection for the thread principal
Cette ligne a vraiment aidé. MerciGarder à l'esprit qu'un Principal peut avoir plus d'une identité associés, par exemple vous vous êtes authentifié avec l'Authentification Windows, mais ensuite ajouté une identité personnalisée avec des revendications à partir de votre base de données.
Donc toute réclamation vérifier potentiellement besoin de regarder toutes les identités, voici un couple de méthodes d'extension qui permettra