按用户角色限制枚举值

时间:2019-05-31 12:48:33

标签: c# asp.net-core-webapi

我有一个行动清单。操作由两个用户角色划分。用户通过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);
}

1 个答案:

答案 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;
        }
    }