我有一个行动清单。操作由两个用户角色划分。用户通过Web API向应用发出请求。如何根据用户角色限制Web API操作接受的值?
目前,我有两个角色,正在使用两个枚举和两个Web API方法。将值传递到数据库存储库时,它将转换为整数。这不是理想的选择-我更喜欢在存储库界面中使用枚举的合并。
所以...
管理员可以请求执行Enum1中的操作,非管理员可以同样执行Enum2中的操作。但是执行工作的存储库方法可以使用两个整数值,因为已经处理了授权。
如果枚举是可继承的,枚举继承将解决此问题。
enum EnumAdmin { Action1 = 1, Action2 = 2 }
enum EnumNotAdmin { Action3 = 3, Action4 = 4 }
void DoAction(int action);
[Authorize(Roles = "Admin")]
public IActionResult AdminMethod(EnumAdmin param)
{
repos.DoAction((int) param);
}
[Authorize(Roles = "NotAdmin")]
public IActionResult AdminMethod(EnumNotAdmin param)
{
repos.DoAction((int) param);
}
答案 0 :(得分:0)
您已经更新了问题以定义问题。我认为您可以使用flyweight设计模式来解决此问题。不太好,但我在下面取样。我用班级担任这个角色。因为枚举类型是密封的。
public class User
{
public string Name { get; set; }
}
public class RoleBase
{
}
public class RoleAdmin: RoleBase
{
public bool Action1 { get; set; }
public bool Action2 { get; set; }
}
public class RoleNotAdmin: RoleBase
{
public bool Action3 { get; set; }
public bool Action4 { get; set; }
}
public interface IPermission
{
bool IsAuthorization(RoleBase role, User user);
}
public class PermissionAdmin : IPermission
{
public bool IsAuthorization(RoleBase roleBase, User user)
{
var roleAdmin = roleBase as RoleAdmin;
return true;
}
}