asp.net-mvc-2 – 如何覆盖ActionLink行为
发布时间:2020-12-16 07:15:59 所属栏目:asp.Net 来源:网络整理
导读:好的,我想通过ActionLink方法为我的网站添加一些安全性.如果用户有足够的权限访问操作/控制器,则ActionLink应呈现链接.如果没有,它应该返回一个空字符串.现在,ActionLink是一种静态方法,这使得它变得更加困难.有没有办法实现我想要做的事情? 解决方法 新的A
好的,我想通过ActionLink方法为我的网站添加一些安全性.如果用户有足够的权限访问操作/控制器,则ActionLink应呈现链接.如果没有,它应该返回一个空字符串.现在,ActionLink是一种静态方法,这使得它变得更加困难.有没有办法实现我想要做的事情?
解决方法
新的AuthorizeActionLink扩展方法.根据需要过载.
public static MvcHtmlString AuthorizeActionLink(this HtmlHelper helper,string linkText,string actionName,string controllerName,object routeValues,object htmlAttributes) { if (HasActionPermission(helper,actionName,controllerName)) return helper.ActionLink(linkText,controllerName,routeValues,htmlAttributes); return MvcHtmlString.Empty; } public static MvcHtmlString AuthorizeActionLink(this HtmlHelper helper,RouteValueDictionary routeValues,IDictionary<string,object> htmlAttributes) { if (HasActionPermission(helper,htmlAttributes); return MvcHtmlString.Empty; } 在弄清楚用户是否被授权时执行脏工作的方法 static bool HasActionPermission(this HtmlHelper htmlHelper,string controllerName) { ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName) ? htmlHelper.ViewContext.Controller : GetControllerByName(htmlHelper,controllerName); ControllerContext controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext,controllerToLinkTo); ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType()); ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext,actionName); return ActionIsAuthorized(controllerContext,actionDescriptor); } static bool ActionIsAuthorized(ControllerContext controllerContext,ActionDescriptor actionDescriptor) { if (actionDescriptor == null) return false; AuthorizationContext authContext = new AuthorizationContext(controllerContext,actionDescriptor); foreach (IAuthorizationFilter authFilter in actionDescriptor.GetFilters().AuthorizationFilters) { authFilter.OnAuthorization(authContext); if (authContext.Result != null) return false; } return true; } static ControllerBase GetControllerByName(HtmlHelper helper,string controllerName) { IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); IController controller = factory.CreateController(helper.ViewContext.RequestContext,controllerName); if (controller == null) { throw new InvalidOperationException( string.Format( CultureInfo.CurrentUICulture,"Controller factory {0} controller {1} returned null",factory.GetType(),controllerName)); } return (ControllerBase)controller; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-4 – ASP.NET Web API的自定义MVC AuthorizeAt
- 使用ASP.NET 2.0处理过期会话的最有效方法是什么
- asp.net – 如何让Google不会将自定义404错误页面编入索引?
- asp.net-mvc-3 – ASP.Net MVC 3,Ninject和Quartz.Net – 如
- 你能在每个动作上在ASP.NET-MVC中应用ActionFilter吗?
- 如何从asp.net核心中的Microsoft帐户获取外部登录配置文件图
- 初学ReactJS,写了一个RadioButtonList组件
- asp.net实现生成缩略图及给原始图加水印的方法示例
- asp.net-mvc – AntiForgery异常:未提供所需的防伪标记或无
- asp.net – 在代码隐藏中更改文本框BackColor
推荐文章
站长推荐
- 使用asp.net mvc中的Ajax将文件和文本上传到服务
- 如何在非MVC ASP.NET应用程序中使用Fine Uploade
- 调试 ASP.NET Core 2.0 源代码
- asp.net-mvc – 用于支持多种语言的ASP MVC技术
- 一个关于解决序列化问题的编程技巧
- asp.net-core – HttpResponse不包含Dot Net Cor
- asp.net-mvc – 处理MVC中的无效URL
- asp.net-mvc – ASP.NET MVC:如何绑定List类型的
- asp.net-web-api – spotify请求的限制
- asp.net – NewRelic – 如何忽略Web应用程序的一
热点阅读