【问题标题】:How to Group Claims to be Used for AspNetUserClaims?如何对要用于 AspNetUserClaims 的声明进行分组?
【发布时间】:2018-12-12 06:08:54
【问题描述】:

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

假设我有这些声明。

canRead
canWrite
CanUpdate
CanDelete

现在我有两种类型的“角色”管理员(应该有所有这些声明)和用户(应该只有 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

【问题讨论】:

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


    【解决方案1】:

    您仍在考虑角色,因此您尝试将声明分组到类似于角色的组中。您不需要这样做,但如果它满足您的项目要求,则没有任何问题。

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

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

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

    2) 真实角色:在这种情况下,您需要为用户角色提供一个额外的数据表。当管理员向系统添加新用户时,他们会将角色分配给用户。当用户登录时,系统将加载与每个用户角色关联的声明。

    【讨论】:

    • 好吧,现在要求更多的是角色方面的,因为这是客户的想法,您将此角色分配给用户 A,他们可以做该角色允许的所有事情。他们不希望能够允许一次检查每个框。我只是在尝试构建它,以便当他们决定有一天完成将其更改为基本上可以将界面从下拉列表重写为复选框时。因此,如果我理解您写的正确的话,我基本上需要选项 1。虽然我不知道您所说的不需要额外的数据表是什么意思。
    • 即使我这样做了,用户检查每个框以确定用户声明的方式“该列表必须来自某个文件或数据库中的某个地方,这就是其中之一我想知道人们在做什么?Json 文件?就在 C# 或数据库表中。
    • 是的,我推荐选项 1。我所说的数据表是指您使用的存储用户数据的表。对于选项 1,您需要一个表来存储用户的声明,但不需要一个表来存储用户的角色。对于选项 2,您需要一个用于用户声明的表和另一个用于用户角色的表。至于您的第二个问题,我会将它们存储在数据库中(我将这些列表称为表,而将它们称为数据表之上)。对于选项 1,您需要用于关联的 Roles 表、Claims 表和 Role_Claims 表。使用这些表来构建您的 UI 和逻辑。
    • 但是我不应该使用 AspNetRoles/AspNetRoleClaims 表来解决声明和角色,因为它具有一对多的关系,我认为我需要更多对多对多。
    • 另外,当我为这些权限创建 UserClaim 时,我将什么用于 ClaimType。 ClaimTypes.Authentication?所以 new Claim(ClaimTypes.Authentication, "employee.add)
    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2019-02-26
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多