【发布时间】:2020-01-21 06:56:11
【问题描述】:
我想知道是否有更好的方法: 假设我有角色为 “SuperUser”、Admin、“Manager”、“Registered” 的用户。
在站点中注册的所有用户都具有“已注册”角色(例如“经理”用户也具有“已注册”角色)。
现在我要管理用户控制器上的 Delete 操作。我想达到的是:
- “已注册”用户只能删除自己(es:从站点注册中删除)
- “经理”用户可以删除自己和“注册”用户,错误不能删除“超级用户”和“管理员”
- “Admin”用户可以删除自己,“Managers”和“Registered”用户,错误不能删除“SuperUser”
- “超级用户”用户可以删除所有用户角色,甚至是超级用户。
所以我从以下代码开始:
[Authorize(Roles="Registered")]
public void Delete(int id)
{
string[] AllowedRoles = { "SuperAdmin", "Manager" };
if (_identity.FindFirst(ClaimTypes.UserData).Value == id.ToString())
{
//USER can delete himself!
//TO DO: Deletion code
}
else if (User.IsInAnyRole(AllowedRoles))
{
//CHECK IF I CAN DELETE THE GIVEN USER
}
}
我要做的是检查当前用户的每个角色以及要删除的用户,但我真的不喜欢写很多“如果”...... 有没有更好的方法?
谢谢!
PS:不要担心 User.IsInAnyRole(它是一个自定义函数,用于验证用户是否处于指定角色之一。
【问题讨论】:
标签: c# asp.net-mvc authorization roles