需要实施一个系统。在思考如何为用户权限覆盖表时遇到麻烦。 假设我给新用户“ JoeAnalyst”以“ Analyst”的业务角色,该角色对公司具有读取权限。另一个角色可能是“ Senior Analyst”,他们可以在公司上创建,读取,更新和删除。 我想向用户“ JoeAnalyst”授予替代权限,使其能够更新公司,但不能创建一个全新的角色。从逻辑上讲,我会有一个UserClaims表(就像Identity一样)。
Users:
Id, Name
1 Joe
2 Frank
Roles:
Id, Name
1 Analyst
2 Senior Analyst
Claims:
Id, Name
1 Company.Create
2 Company.Read
3 Company.Update
4 Company.Delete
RoleClaims:
Id, RoleId ClaimId
0 1 2
1 2 1
2 2 2
3 2 3
4 2 4
UserRoles
Id UserId RoleId
0 1 1
该问题是UserClaims表的基础。如果添加额外的权限,我会看到类似以下的模式:
UserClaims (option 1)
Id UserId ClaimId
0 1 3
1 2 4
但是,这不允许撤销角色权限。所以这样更好:
UserClaims (option2)
Id UserId ClaimId Override
0 1 3 'ALLOW'
1 2 4 'DENY'
但是,纯文本(或int)看起来很奇怪。所以我在想:
UserClaimsGrant (option3)
Id UserId ClaimId
0 1 3
UserClaimsDeny
Id UserId ClaimId
0 2 4
什么是更好的系统?身份已经做到了吗?我几乎只看到过UserClaims表,就像Identity中的选项1一样,我当然可以扩展Identity,但我认为可能存在某些功能。 谢谢。