我正在阅读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
答案 0 :(得分:0)
您仍在考虑角色,因此您尝试将声明归类为类似于角色的组。您不需要这样做,尽管只要满足您的项目要求就没有错。
没有角色(或组),您将有一个用于用户声明的表。当管理员将新用户添加到系统时,他们会直接将用户的声明(或权限)直接分配给该用户。
对于角色(或组),您有两种选择。
1)虚拟角色:在这种情况下,不需要任何其他数据表。当管理员将新用户添加到系统时,他们将角色分配给该用户。然后,系统将与每个角色关联的声明添加到用户。因此,您使用角色只是一种简单的方法,即可为用户分配声明组,而无需管理员一一点击。
2)实际角色:在这种情况下,您需要一个用于用户角色的附加数据表。当管理员将新用户添加到系统时,他们将角色分配给该用户。当用户登录时,系统将加载与每个用户角色关联的声明。