我正在创建一个包含4个角色的管理面板。管理员拥有所有数据的权限。组织者角色可以访问他的数据。第三个角色可以访问组织者允许的那些数据。和4rth角色具有3rth角色允许的访问权限。
在CRUD操作中,我使用以下代码获取当前用户ID:
var currentUser = Guid.Parse(Thread.CurrentPrincipal.Identity.GetUserId());
并将此Id传递给数据访问层。如果当前用户是所需实体的所有者,则CRUD操作将起作用。 在数据访问leyer中,我检查当前用户Id是否与实体的UserId匹配,然后让它进行操作:
var product=_dbContext.Products.Where(x=>x.UserId==currentUser && x.ProductId== productId);
但我希望管理员能够做这些操作。我知道我可以根据当前用户角色编写多种方法来执行相同的操作。但有没有更清洁的解决方案?
例如,组织者可以编辑id = 1的产品,因为他是id = 1的产品的所有者。但我想要,也管理员能够编辑id = 1的产品。
答案 0 :(得分:0)
我认为你正在寻找类似的东西......
var rolesForUser = await userManager.GetRolesAsync(currentUser);
Product product;
if (rolesForUser.Contains("Admin"))
{
product = _dbContext.Products.Where(x.ProductId == productId);
}
else
{
product = _dbContext.Products.Where(x => x.UserId == currentUser && x.ProductId == productId);
}