所以我有下一个问题。我有一个控制器和一些用户角色。我有[Authorize(Roles="Admin")]
时使用字符串,但我想使用这样的枚举,因为如果我更改角色的名称,我将在一个地方修改。
我已经尝试了Roles=UserRoles.Admin.ToString()
,其中UserRoles是我的枚举,但我收到了错误。我已经从这里读过aricles,但似乎没有人帮我解决我的问题。
你能帮我解决一下这个建议吗?
答案 0 :(得分: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 :(得分:1)
这可以做到,但你需要做一些工作。
IAuthorizationFilter
(如AuthorizeAttribute
所做的那样)AuthorizeAttribute
(整个过滤机制是可扩展的,允许这种事情。)
但是,我过去所做的就是定义一系列传递给属性实例的常量字符串。因此,保持名称的中心。