我仍然对身份验证的所有内容感到困惑。
首先,我还是不清楚角色、策略/声明之间的区别。从我所了解的来看,角色是旧的做事方式,为了向后兼容而保留下来的,那么AspNetRoleClaims是否也属于这种向后兼容性呢?
我认为当我单独考虑声明和策略时,我能明白它们的含义,比如说策略基本上是必须通过的一组规则,并且可以更改规则而无需在整个代码中更改角色。
声明指的是一个可信任的来源,关于用户已经过证实的信息(例如他们的年龄,可能来自政府来源)。
现在让我感到困惑的是将所有这些东西放在一起。
我生成了身份验证表并查看了其中的内容。
AspNetUsers
AspNetUserRoles
AspNetRoles
AspNetRoleClaims
AspNetUserClaims
AspNetUserLogins
我理解AspNetUsers表的作用和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",然后再创建另一个声明或策略来检查他们所在的部门,以确保他们正在尝试将内容添加到正确的部门?
编辑
你认为我需要使用基于资源的授权吗?
AspNetUserClaims
表中创建自己的角色声明。选择最好解决问题的方法!(请分享链接,因为我没有听说过不应该使用角色的建议。) - galdinAddDefaultIdentity()
的模板,该模板使用IdentityCore而不是整个内容。 - galdin