web-dev-qa-db-fra.com

Identité principale Asp.net Utiliser AspNetUserClaims ou AspNetRoleClaims?

Je suis toujours confus à propos de toutes ces choses sur l'identité.

D'abord, je suis toujours confus de la différence entre les rôles, les politiques/les revendications. D'après ce que j'ai lu, les rôles sont l'ancienne façon de faire les choses et ont été conservés pour la compatibilité descendante, cela signifie-t-il que AspNetRoleClaims fait partie de cette compatibilité descendante?

Je pense que je comprends les revendications et les politiques lorsque je pense à elles individuellement, comme la politique est essentiellement un ensemble de règles qui doivent passer et donne la possibilité de changer les règles sans avoir à parcourir tout le code et changer les rôles.

S'il s'agissait d'une réclamation, c'est essentiellement une source de confiance qui se porte garant de cet utilisateur (c'est-à-dire son âge, qui pourrait provenir d'une source gouvernementale).

Maintenant, ce qui m'embrouille, c'est de tout rassembler.

J'ai généré les tables d'identité et voir

AspNetUsers
AspNetUserRoles
AspNetRoles
AspNetRoleClaims
AspNetUserClaims
AspNetUserLogins

J'obtiens ce que la table AspNetUsers fait et AspNetUserLogins (semble être s'ils utilisent comme des fournisseurs de connexion externes).

Je suis confus sur la différence entre AspNetRoleClaims et AspNetUserClaims. Dois-je simplement utiliser AspNetUserClaims ou dois-je tout utiliser?

Dis que j'ai ce secenario

J'ai une entreprise qui a de nombreuses succursales, dans chaque succursale, ils seront administrateurs de cette succursale, ils ont le plein pouvoir sur la succursale et peuvent faire tout sauf rien dans une autre succursale. Au niveau de l'entreprise, il y aura un administrateur qui peut tout faire au niveau de l'entreprise et de n'importe quelle succursale. Enfin, j'ai une personne dans la branche qui peut simplement ajouter de nouveaux employés.

À quoi tout cela ressemble-t-il? Dois-je faire 3 rôles?

CompanyAdmin
BranchAdmin
AddUsersAtBranchLevel (or is this some sort of claim??)
What do the tables look like? Is there anything going to be in AspNetRoleClaims? AspNetUserClaims?

Maintenant, je peux créer une stratégie pour vérifier si l'utilisateur est un administrateur de branche et s'il essaie de modifier sa branche?

Ou est-ce que j'oublie tout ce que j'ai de rôle dans les AspNetUserClaims

User1   CanAddUserToBranch true
User1 CanDeleteUserBranch true
User1 CanAddUserToCompany true

Ensuite, dans mon code, créez ces différents "ClaimTypes" et créez une politique qui voit s'ils ont dit "CanAddUserToBranch", puis une autre revendication ou politique pour vérifier dans quelle branche ils se trouvent pour vous assurer qu'ils essaient d'ajouter quelque chose à la bonne branche. ?

Éditer

Pensez-vous que j'ai besoin d'utiliser une autorisation basée sur les ressources?

15
chobo2
+------------------+------------------+
|      Table       |   Description    |
+------------------+------------------+
| AspNetUsers      | The users.       |
| AspNetRoles      | The roles.       |
| AspNetUserRoles  | Roles of users.  |
| AspNetUserClaims | Claims by users. |
| AspNetRoleClaims | Claims by roles. |
+------------------+------------------+
  • Un rôle est quelque chose attribué à un utilisateur.
    • Par exemple. Jane est administratrice.
  • Une réclamation est une réclamation d'un utilisateur.
    • Par exemple. La date de naissance de Jane est le 1990-10-1.
  • Une revendication de rôle est une revendication revendiquée par un rôle.
    • Par exemple. Les administrateurs ont accès au tableau de bord.

Si vous trouvez les rôles et les revendications déroutants, c'est probablement parce que les rôles sont un cas spécial de revendications, c'est-à-dire que les rôles sont des revendications.

Rôle vs politique

  • Pour l'autorisation basée sur les rôles, le système d'autorisation vérifie si l'utilisateur a reçu les rôles requis pour accéder à la ressource donnée.

    • Par exemple: seuls les utilisateurs avec le rôle Admin peuvent accéder au tableau de bord.
  • Pour l'autorisation basée sur une stratégie, une logique métier est exécutée pour décider si l'accès aux ressources doit être autorisé.

    • Par exemple: seuls les administrateurs âgés de plus de 40 ans peuvent accéder aux données financières.

Dis que j'ai ce scénario

J'ai une entreprise qui a de nombreuses succursales, dans chaque succursale, ils seront administrateurs de cette succursale, ils ont le plein pouvoir sur la succursale et peuvent faire tout sauf rien dans une autre succursale. Au niveau de l'entreprise, il y aura un administrateur qui peut tout faire au niveau de l'entreprise et de n'importe quelle succursale. Enfin, j'ai une personne dans la branche qui peut simplement ajouter de nouveaux employés.

Voici une façon de procéder:

2 rôles:Admin, TheRoleThatCanAddUsers
ne revendication appelé Branch qui peut prendre un identifiant de branche (ou toute autre chose pour identifier la branche). Les administrateurs d'entreprise peuvent utiliser une valeur telle que "CompanyWide" ou 0 ou -1.

Créez maintenant une stratégie qui vérifie le rôle et la revendication de branche et décide si l'utilisateur doit être autorisé.

17
gldraphael