asp.net – 基于基于角色的安全隐藏Html.ActionLinks
我在_Layout.cshtml中使用@RenderSection(“Contextual”,false)来允许不同的视图在那里呈现它们的特定内容.有些人没有,有些则没有.
此外,我使用基于角色的安全性和ActionFilter来控制特定用户是否可以访问特定的控制器操作,从而控制我的站点上的路由. 我想做的是在我的_Layout.cshtml上提供一个@RenderSection(“Contextual”,false)部分,然后让特定页面提供对该页面有意义的任何上下文内容,并让相应的控制器处理审查是否用户可以执行操作,甚至可能看到选项存在,但我不确定我是否正确地考虑了这一点.以下是目前的情况: 现在我在我的一个Index.cshtml文件中有一个部分,如下所示: @section Contextual { <div>@Html.ActionLink("Create New","Create")</div> <div>@Html.ActionLink("Generate Report","Report")</div> <div>@Html.ActionLink("Other Stuff","Other")</div> } 然后在我相应的控制器中,我有类似的东西: [Authorize(Roles = "Editor")] public ActionResult Create() { // stuff } 这将按我的意愿工作(非编辑器不会创建新项目),但Create条目可供所有人查看.我可以这样做: @section Contextual { @if (User.IsInRole("Editor")) { <div>@Html.ActionLink("Create New","Create")</div> } <div>@Html.ActionLink("Generate Report","Other")</div> } 这样做效果很好,隐藏了非编辑的创建链接,但是我已经开始关注这样做是否好处,而且我可以看到在路上我遇到的情况规则改变然后我有两个位置保持同步:控制器动作的属性和视图中的代码. 这是一种合理的方法吗?有没有更好的方法来解决这个问题? 解决方法
我喜欢使用对于在控制器上填充的视图模型更明确的标志.
例如: // on the controller viewModel.CanCrete = User.IsInRole("Editor"); // ...snip... return View(viewModel); } 因此,您需要将此标志添加到视图模型中,或者可能添加到视图模型的基类中.您可以创建一个Custom Action Filter的路径,将其填充到多个控制器中,或者在控制器基类中进行一些处理. 我还想定义一个方便的扩展方法: public static string If( this string s,bool condition ) { return condition ? s : String.Empty; } 根据您使用的API,您可能还需要扩展MvcHtmlString. 然后在视图中: @section Contextual { <div>@Html.ActionLink("Create New","Create").If(Model.CanCrete)</div> <div>@Html.ActionLink("Generate Report","Other")</div> } 你可以决定你想做什么关于div,你可能想要另一个帮助包裹div中的链接,或者你可以使用CSS来实现你想要的任何视觉布局. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.Net中使用Page_Load和Page_PreRender
- asp.net-mvc – ASP.NET MVC Views可以在不同的项目中重用吗
- linq – ASP.NET Web API GET方法:为单个参数传递多个值
- asp.net-web-api – 在ODataConventionModelBuilder中设置数
- asp.net-mvc – 当路由有多个值时如何构建RouteValueDictio
- asp.net – 天蓝色的动态子域
- asp.net – 为什么aspx文件返回404(“无法找到该页面”)
- IIS或ASP.NET是否创建了包含请求URL的ETW事件?
- .NET 3.5 / VS 2008上的ASP.NET Web Services的自定义HTTP基
- asp.net – 在IE7 / IE8中未定义window.XMLHttpRequest
- asp-classic – Checkbox布尔值Classic ASP
- asp.net – 使用ITemplate对自定义控件进行数据绑
- asp.net-mvc – 是否可以在Orchard CMS中使用剃刀
- Asp.net利用JQuery AJAX实现无刷新评论思路与代码
- asp.net-mvc – 为现有项目添加标识
- asp.net-mvc – 在MVC4中路由具有扩展名的url将无
- asp.net-mvc-4 – 始终显示在Kendo网格中选择的第
- asp.net-mvc – NGEN可以与Azure网站一起使用吗?
- asp.net-mvc – 单元测试适配器抛出异常:无法在
- asp.net – 我可以修改Request.Headers集合吗?