AuthorizeAttribute使用枚举隐式键入填充的角色

时间:2018-03-15 22:53:55

标签: c#

我在Enum中有角色

public enum Role
    {
        Undefined = 0,
        Public= 1, 
        Private = 2,
       ..... list continues...  
    }

我正在使用AuthoriseAtribute for API

设置访问权限
 [HttpGet]
 [AuthoriseUser(AllowedRoles = new[] {  Role.Private, Role.Public })]
 public <anyreturnType> Get(int id)
 {
   // some stuff
 }

哪个工作正常。但我喜欢让它更具动态性并优化代码,所以我没有编写完整的角色列表。

所以我试图实现这一目标。

[HttpGet]
 [AuthoriseUser(AllowedRoles = new[] {  All Roles except Undefined })]
 public <anyreturnType> Get(int id)
 {
   // some stuff
 }

这是我创建的解决方案,但不起作用。

[HttpGet]
 [AuthoriseUser(  AllowedRoles = new[] { Enum.GetNames(typeof(Role)).Cast<Role>().Where(r => r != Role.Undefined) } )]
 public <anyreturnType> Get(int id)
 {
   // some stuff
 }

我得到的错误是

  

错误CS0029无法隐式转换类型   'System.Collections.Generic.IEnumerable []'到   'Model.Role []'

AuthoriseUserAttribute类看起来像这样。

   public class AuthoriseUserAttribute : AuthorizeAttribute
    { 
        public Role[] AllowedRoles { get; set; }
    .....more stuff here....
    }

当我使用@Camilo Terevinto和@ejohnson推荐的解决方案时 我收到以下错误

enter image description here

1 个答案:

答案 0 :(得分:0)

Camilo Terevinto是正确的,除了您还需要使用Enum.GetValues而不是Enum.GetNames(返回字符串):

Enum.GetValues(typeof(Role)).Cast<Role>().Where(r => r != Role.Undefined).ToArray()