MVC 5 中Filter控制 action的访问权限
2018-06-22 06:01:01来源:未知 阅读 ()
1,创建一个继承自 FilterAttribute, IActionFilter的类
namespace HeatMetering2.Filters { public class HMV2AuthenticationAttribute : FilterAttribute, IActionFilter { int notAuthentication = 0; //设置未认证标志,用于区分返回不同的未认证页面 public void OnActionExecuted(ActionExecutedContext filterContext) { } public void OnActionExecuting(ActionExecutingContext filterContext) { //if (true) //{ // // 已登录,并且查询数据库后具有操作权限或者设置了Anonymouse,以及当前用户是admin //} //else //{ // context.Result = new HttpUnauthorizedResult(); // mark unauthorized //} notAuthentication = 0; if (notAuthentication == 0 && filterContext.ActionDescriptor.ControllerDescriptor.ControllerName == "basLoginUsers" && filterContext.ActionDescriptor.ActionName == "EditBasLoginUser") { filterContext.Result = new RedirectToRouteResult("Default", new System.Web.Routing.RouteValueDictionary{ {"controller", "Account"}, {"action", "NotAuthentication"}, {"returnUrl", filterContext.HttpContext.Request.RawUrl} }); } } } }
2,在controller中这样引用该类
[HMV2Authentication] public class basLoginUsersController : Controller { private HeatMeteringV2DBContext db = new HeatMeteringV2DBContext("HeatMeteringV2DBContext"); // GET: basLoginUsers public ActionResult Index() { return View(); } public ActionResult EditBasLoginUser(basLoginUser _basLoginUser) { if (ModelState.IsValid) { try { db.Entry(_basLoginUser).State = EntityState.Modified; string _password = _basLoginUser.Password; //随机 "盐",生成自GUID string salt = Guid.NewGuid().ToString(); string strPasswordHash = CommFunc.GetPasswordEncryptByHashWithSalt(_password, salt); _basLoginUser.PasswordHash = strPasswordHash; _basLoginUser.PasswordSalt = salt; db.SaveChanges(); var json = new { okMsg = "修改成功" }; return Json(json, "text/html", JsonRequestBehavior.AllowGet); } catch(Exception ex) { var json = new { errorMsg = "保存数据出错:"+ex.Message.ToString() }; return Json(json, "text/html", JsonRequestBehavior.AllowGet); } } else { var json = new { errorMsg = "验证错误" }; return Json(json, "text/html", JsonRequestBehavior.AllowGet); } } }
3,在Account controller中定义如下Action,这样引用basLoginUsersController 的EditBasLoginUser 这个Action都会被提示当前用户没有此项操作权限,
这里仅仅举了个例子,再实际应用中我们可以在我们定义的类的OnActionExecuting方法里面获取我们已经设定好的对controller->action的权限设定,来决定是否禁用该Action,以达到设定权限的目的。但是这样做的不好之处是,用户仍然可以执行操作,只是我们在用户操作以后才可以告诉用户啥啥不能用种种,有点不好。
目前想到的方法是在页面上用Ajax请求权限数据,利用Javascript(Jquery)来利用元素ID选择器选择操作元素,并且使元素不可操作/编辑
[AllowAnonymous] public ActionResult NotAuthentication() { var json = new { errorMsg = "当前用户没有此项操作权限" }; return Json(json, "text/html", JsonRequestBehavior.AllowGet); }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- ASP.NET MVC Admin主页快速构建 2020-03-23
- Asp.Net MVC4通过id更新表单内容的思路详解 2020-03-19
- MVC数据验证详解 2020-03-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash