2015-10-05 95 views
-1

,所以我有一个问题。我有一个控制器和一些用户角色。我使用的字符串时,我有[Authorize(Roles="Admin")],但我想用一个枚举一样,因为如果我改变角色的名字,我会在一个位置修改。 我已经尝试过Roles=UserRoles.Admin.ToString(),其中是的UserRole我的枚举,但我得到一个错误。我已经从这里阅读了Aricles,但似乎没有人帮助我解决我的问题。如字符串使用枚举点网

你能帮我解决一下吗?

+0

创建自定义'AuthorizeAttribute'看到这样的事情:http://stackoverflow.com/questions/13264496/asp-net-mvc-4-custom-authorize-attribute-with-permission-codes-without-roles – Ric

回答

3

像这样创建一个自定义AuthorizeAttribute

using System.Collections.Generic; 
using System.Web.Mvc; 

namespace MyApp.Whatever 
{ 
    public class CustomAuthorizeAttribute : AuthorizeAttribute 
    { 
     public CustomAuthorizeAttribute(params UserRoles[] userRoles) 
     { 
      Roles = string.Join(",", userRoles); 
     } 
    } 
} 

然后你可以使用它,你通常会使用AuthorizeAttribute,就像这样:

using System.Web.Mvc; 

namespace MyApp.Whatever 
{ 
    [CustomAuthorize(UserRoles.Admin, UserRoles.Whatever)] 
    public class MyController : Controller 
    { 
     ... 
    } 
} 
1

这可以完成,但你需要做一些工作。

  • 创建你自己实现IAuthorizationFilter自定义属性(如AuthorizeAttribute一样)
  • 接受你列举在其构造函数(或者通过属性)
  • 正向操作的一个包含实例AuthorizeAttribute

(整个过滤机制是可扩展的,允许这种事情。)

不过,我在过去已经完成了,处理这个问题是定义一系列传递给属性实例的常量字符串。因此保持名字中心。