【发布时间】:2018-10-04 15:36:48
【问题描述】:
我想从数据库中获取以下角色(管理员、IT、..),而不需要在操作结果之上进行硬编码。请提供任何帮助。
[Authorize(Roles = "Admin,IT")]
public ActionResult Index()
{
}
【问题讨论】:
标签: c# asp.net-mvc authentication authorization roleprovider
我想从数据库中获取以下角色(管理员、IT、..),而不需要在操作结果之上进行硬编码。请提供任何帮助。
[Authorize(Roles = "Admin,IT")]
public ActionResult Index()
{
}
【问题讨论】:
标签: c# asp.net-mvc authentication authorization roleprovider
没有任何超级简单的方法可以做到这一点。您可以将[Authorize] 属性应用于控制器而不是操作,但它仍然是“硬编码”它。
您可以创建自定义授权属性 ([link])1,但您必须将路由值以及允许访问的角色存储在数据库中路线。然而,这只是将手动更改代码的负担转移到数据库中。
我真的不认为这真的应该被视为“硬编码”,因为您必须在某处声明您的授权,并且您仍然可以在不同的环境中拥有具有不同权限的不同用户。除了开发人员之外,还有谁应该最清楚哪些路线需要哪些授权?您是否想因为您在某处更改了路由而中断访问控制?
【讨论】:
创建一个动作定位器
public class ValidationPermission : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(System.Web.HttpContext.Current.Session["UserName"] == null)
System.Web.HttpContext.Current.Response.RedirectToRoute("Login");
else{
// code check CheckPermission
}
}
}
动作控制器
[ValidationPermission(Action = ActionEnum.Read, Module = CModule)]
public ActionResult Index()
{
// something code
}
【讨论】:
你可以试试这个方法
public static Role {
public static string Admin ="Admin";
public static string IT ="IT";
}
[Authorize(Roles = Role.Admin,Role.IT)]
public ActionResult Index()
{
}
【讨论】: