您的位置:首页 > 其它

朴素的标题:MVC中权限管理实践

2016-01-13 18:32 253 查看
  基于MVC的web项目最好的权限控制方式我认为是对Action的控制,实现思路记录于此,权限管理分成两个部分授权、认证。


[b]一、授权[/b]


  1、读取当前项目中的所有需要控制的Action

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//获取当前用户所拥有的权限
List<ActionInfo> right = new List<ActionInfo>() { new ActionInfo() { Action = "A1", Controller = "RBAC.Controllers.AController" }, new ActionInfo() { Action = "A2", Controller = "RBAC.Controllers.AController" } };

//白名单
var whiteAction = GetWhiteAction();

//获取用户要请求的页面
ActionInfo context = new ActionInfo() { Action = filterContext.ActionDescriptor.ActionName, Controller = filterContext.Controller.ToString() };

//判断是否有权访问
if (!(whiteAction.Any(r => r.Action.Equals(context.Action, StringComparison.CurrentCultureIgnoreCase) && r.Controller.Equals(context.Controller, StringComparison.CurrentCultureIgnoreCase)) || right.Any(r => r.Action.Equals(context.Action, StringComparison.CurrentCultureIgnoreCase) && r.Controller.Equals(context.Controller, StringComparison.CurrentCultureIgnoreCase))))
{
filterContext.HttpContext.Response.Redirect("/Main/Msg");
}
}


View Code
  2、在 Global中注册过滤器

     GlobalFilters.Filters.Add(new AuthFilter());


  3、给一些不需要授权的Action加上特性[AllowAnonymous],当然也可以自定义其他的特性

[AllowAnonymous]
public ActionResult Msg()
{
return View();
}


  由此基本完成,也可以下载源码参考下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: