0

J'ai un projet ASP.NET MVC et le client nécessite un accès séparé pour différents rôles. Il veut avoir de nombreux rôles, mais certains d'entre eux ont un accès très similaire (sauf certaines choses). Bien sûr, je peux le faire comme ce qui suit:Autorisation basée sur le rôle ou la revendication? Ou hybride?

if (User.IsInRole("Superadmin") || User.IsInRole("CompanyAdmin") || ...) 
{ 
    // bla-bla-bla 
} 
else if (....) 
{ 
} 

Cependant, il me semble qu'il ne soit pas aussi souple que devrait être. Toute petite variation de droits nécessite que le script passe en revue l'ensemble du projet et le modifie.

Je pense faire une approche "hybride", c'est-à-dire définir un rôle pour un utilisateur comme maintenant, et également définir des revendications. Et ainsi vérifier par la suite seulement les revendications, mais pas la liste des rôles. S'il est nécessaire de changer l'accès pour n'importe quel rôle, il suffit d'ajouter/supprimer une revendication à un endroit après la connexion (même pas nécessaire de l'enregistrer dans la base de données).

Qu'en pensez-vous?

Répondre

2

Utilisation Revendications pour tout. Certaines revendications peuvent simplement être - des rôles. Ainsi, vous pouvez avoir un utilisateur avec Claim: role> CompanyAdmin mais le même utilisateur peut également avoir Claim: canAccessSuperadminDashboard> true (ou de la manière dont vous souhaitez définir des droits supplémentaires). Lorsque vous combinez les deux, vous obtenez une approche très granulaire où vos premières vérifications peuvent être pour les revendications de rôle, puis pour les choses plus granulaires, vous vérifiez des revendications particulières. L'un des avantages de cette approche est que les revendications de rôle sont mappées à l'utilisateur principal de sorte que votre Authorize (Roles = "Admin") fonctionne directement avec les revendications de rôle.

+0

mais cela m'oblige à créer une longue liste pour vérifier chaque rôle autorisé et canAccessSuperadminDashboard. Je veux vérifier une seule réclamation ... –

+0

cochez une seule réclamation? Cela ne va pas fonctionner, sauf si vous voulez avoir autant de revendications que permutations de tous les droits possibles. ce qui serait, un peu hm ... maladroit :) –