用户声明覆盖角色声明架构

时间:2018-10-23 18:40:01

标签: c# .net-core asp.net-identity

需要实施一个系统。在思考如何为用户权限覆盖表时遇到麻烦。 假设我给新用户“ 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,但我认为可能存在某些功能。 谢谢。

0 个答案:

没有答案