Asp.net 核心标识使用 AspNetUserClaims 还是 AspNetRoleClaims?

Asp.net Core Identity Use AspNetUserClaims or AspNetRoleClaims?

我仍然对所有这些身份问题感到困惑。

首先我还是搞不清楚角色之间的区别,Policies/Claims。据我了解,roles 是旧的处理方式,并且为了向后兼容而保留,那么这是否意味着 AspNetRoleClaims 是这种向后兼容的一部分?

我认为当单独考虑声明和政策时,我理解它们,就像政策基本上是一组必须通过的规则,并提供更改规则的能力,而无需完成所有代码和更改角色。

是一项声明,基本上是可信来源为该用户提供担保(即这是他们的年龄,可能来自政府来源)。

现在让我困惑的是把它们放在一起。

我生成了身份 tables 并查看

AspNetUsers
AspNetUserRoles
AspNetRoles
AspNetRoleClaims
AspNetUserClaims
AspNetUserLogins

我明白了 AspNetUsers table 和 AspNetUserLogins(如果他们像外部登录提供商一样使用的话)的作用。

我对 AspNetRoleClaims 和 AspNetUserClaims 之间的区别感到困惑。我是只使用 AspNetUserClaims 还是什么都用?

假设我有这个场景

我有一家公司,有很多分支机构,在每个分支机构中,他们将成为该分支机构的管理员,他们对分支机构拥有全部权力,可以做任何事情,但在另一个分支机构却什么也做不了。在公司层面将有一个管理员,他可以在公司层面和任何分支机构做任何事情。分公司终于有一个人可以添加新员工了。

这一切看起来像什么?我做 3 个角色吗?

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?

现在我可以制定一个策略来检查用户是否是分支管理员以及他们是否正在尝试编辑他们的分支?

或者我只是忘记所有角色的东西并在 AspNetUserClaims

User1   CanAddUserToBranch true
User1 CanDeleteUserBranch true
User1 CanAddUserToCompany true

然后在我的代码中让所有这些都不同 "ClaimTypes" 并创建一个政策来查看他们是否说 "CanAddUserToBranch" 然后另一个声明或政策来检查他们在哪个分支以确保他们正在尝试向正确的分支添加内容?

编辑

您认为我需要使用基于资源的授权吗?

+------------------+------------------+
|      Table       |   Description    |
+------------------+------------------+
| AspNetUsers      | The users.       |
| AspNetRoles      | The roles.       |
| AspNetUserRoles  | Roles of users.  |
| AspNetUserClaims | Claims by users. |
| AspNetRoleClaims | Claims by roles. |
+------------------+------------------+
  • 角色是分配给用户的东西。
    • 例如。简是管理员。
  • 声明是用户声明的内容。
    • 例如。简的出生日期是 1990 年 10 月 1 日。
  • 角色声明是角色声明的声明。
    • 例如。管理员可以访问仪表板。

如果您发现角色和声明混淆,可能是因为角色是声明的特例,即角色是声明。

角色与政策

  • 对于基于角色的授权,授权系统会检查是否已为用户分配了访问给定资源所需的角色。

    • 例如:只有具有管理员角色的用户才能访问仪表板。
  • 对于基于策略的授权,执行一些业务逻辑来决定是否应该授权资源访问。

    • 例如:只有 40 岁以上的管理员才能访问财务数据。

Say I have this scenario

I have a company that has many branches, in each branch their will be an administrator of that branch, they got full power over the branch and can do anything but nothing at another branch. At the company level there will an administrator who can do anything at the company level and any branch. Finally I have a person in the branch who can just add new employees.

这是一种方法:

2个角色: Admin, TheRoleThatCanAddUsers
一个名为 Branch 的声明 可以使用分支 ID(或任何其他标识分支的东西)。公司管理员可以使用 "CompanyWide"0-1.

这样的值

现在创建一个策略来检查 Role 和 Branch 声明并决定用户是否应该被授权。