如何对用于AspNetUserClaims的声明进行分组?

时间:2018-12-11 21:48:25

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

我正在阅读this这本书,其中谈到使用声明和角色是为了获得更多遗产。似乎没有谈论的一件事是如何存储这些声明。

说我有这些主张。

canRead
canWrite
CanUpdate
CanDelete

现在我有两种类型的“角色”:admin(应该拥有所有这些声明)和user(应该具有canRead)。

我应该在存储这些声明的数据库中创建一个新表(或劫持角色表...如果您使用AspNetUserClaims,那么您将不会使用角色表)在我的数据库中?还是在我的服务层?

例如正在创建一个新用户,并且在我的前端,我想给该用户一个选择,使其成为此人并成为“管理员”或“用户”。我应该有这样的东西

public Claim {
   public string ClaimType { get; set; }
   public string ClaimValue { get; set; }  
}

//somewhere in a service file.
List<Claim> allClaims = new List<Claim>(){
    new Claim() {
        ClaimType: "Permission",
        ClaimValue: "canRead",
    },
     new Claim() {
        ClaimType: "Permission",
        ClaimValue: "canWrite",
    },
     new Claim() {
        ClaimType: "Permission",
        ClaimValue: "canUpdate",
    },
     new Claim() {
        ClaimType: "Permission",
        ClaimValue: "canDelete",
    }
}

var groupedClaims = Dictionary<string,List<Claim>>()
groupedClaims.add("admin", allClaims);
groupedClaims.add("user", [only some of the claims]);

// then when need to create new user grab right group claims and insert into AspNetUserClaims

1 个答案:

答案 0 :(得分:0)

您仍在考虑角色,因此您尝试将声明归类为类似于角色的组。您不需要这样做,尽管只要满足您的项目要求就没有错。

没有角色(或组),您将有一个用于用户声明的表。当管理员将新用户添加到系统时,他们会直接将用户的声明(或权限)直接分配给该用户。

对于角色(或组),您有两种选择。

1)虚拟角色:在这种情况下,不需要任何其他数据表。当管理员将新用户添加到系统时,他们将角色分配给该用户。然后,系统将与每个角色关联的声明添加到用户。因此,您使用角色只是一种简单的方法,即可为用户分配声明组,而无需管理员一一点击。

2)实际角色:在这种情况下,您需要一个用于用户角色的附加数据表。当管理员将新用户添加到系统时,他们将角色分配给该用户。当用户登录时,系统将加载与每个用户角色关联的声明。