爱上MVC3系列~使用Func<string, HelperResult>实现访问权限的设计

简介:

这个文章事实上也是一个系列,主要介绍小微对于MVC3上的权限设计方案,如对Action的访问权限,对PartialView的访问权限,和我最近研究的

对页面中Html块级访问权限!

一 提供好的~Action与Controller加访问权限

二 扩展MVC中的Html.Action,为分部视图作访问权限

三 扩展MVC的HtmlHelper,为页面某块HTML块(闭合的块)加访问权限

一 提供好的~Action与Controller加访问权限

直接将特性加到controller或者action上,即可,对于这部分详细内容可以看这篇文章

1          [RoleFilter(RoleFlag.WorkShopUser)]
2         public JsonResult TalkDetail(FormCollection form)
3         {
4         }

二 扩展MVC中的Html.Action,为分部视图作访问权限

对于,为Html.Action加权限其实就是把原来的方法进行重载几个,然后加入权限判断依据,就可以了,比较简单,但比较实用,在项目开发中

感觉不太灵活,但对于要为公用的分部视图而言,已经足够了。(应该分部视图A页面是一种访问权限,而在B页面是另一种访问权限,所以不能直接加到Action上幼)

 1  /// <summary>
 2         /// 带权限的分部视图
 3         /// </summary>
 4         /// <param name="htmlHelper"></param>
 5         /// <param name="actionName"></param>
 6         /// <param name="controllerName"></param>
 7         /// <param name="routeValues"></param>
 8         /// <param name="roleFlag"></param>
 9         /// <returns></returns>
10         public static MvcHtmlString Action(this HtmlHelper htmlHelper, string actionName, string controllerName, object routeValues, RoleFlag roleFlag)
11         {
12             #region 权限判断,如果不符合,就返回null
13            //权限验证代码片断...
14             #endregion
15             return ChildActionExtensions.Action(htmlHelper, actionName, controllerName, routeValues);
16         }
17         /// <summary>
18         /// 带权限的分部视图
19         /// </summary>
20         /// <param name="htmlHelper"></param>
21         /// <param name="actionName"></param>
22         /// <param name="roleFlag"></param>
23         /// <returns></returns>
24         public static MvcHtmlString Action(this HtmlHelper htmlHelper, string actionName, RoleFlag roleFlag)
25         {
26             return Action(htmlHelper, actionName, null, null, roleFlag);
27         }
28         /// <summary>
29         /// 带权限的分部视图
30         /// </summary>
31         /// <param name="htmlHelper"></param>
32         /// <param name="actionName"></param>
33         /// <param name="routeValues"></param>
34         /// <param name="roleFlag"></param>
35         /// <returns></returns>
36         public static MvcHtmlString Action(this HtmlHelper htmlHelper, string actionName, object routeValues, RoleFlag roleFlag)
37         {
38             return Action(htmlHelper, actionName, null, routeValues, roleFlag);
39         }

三 扩展MVC的HtmlHelper,为页面某块HTML块(闭合的块)加访问权限

对于这种方式是我最喜欢的也是最亲爱的方式,因为它的灵活性确实很高,再配合Razor引擎,可以说在代码的艺术性上是一个升华,呵呵

看看他在页面上的体现吧:

1 @Html.ServerTime(UserRole.GetHashCode(),
2 @<div>
3     <span>ok牛了</span><input type="button" value="不会吧" />
4 </div>)

而它的核心代码为:

 1        #region 页面代码块级权限设计
 2         /// <summary>
 3         /// 页面代码块级权限设计
 4         /// </summary>
 5         /// <param name="htmlHelper"></param>
 6         /// <param name="role">角色ID</param>
 7         /// <param name="template"></param>
 8         /// <returns></returns>
 9         public static HelperResult RoleHtmlTags(this HtmlHelper htmlHelper, int role, Func<string, HelperResult> template)
10         {
11             if (role != 1)
12                 return null;
13             return new HelperResult(writer =>
14             {
15                 writer.Write(template.Invoke(null));
16             });
17         }
18         #endregion

调用时的代码,注意我们使用它输入参数使用<div>或者<span>等标记括起来

@Html.RoleHtmlTags(1,
@<div>
<p>我的Html代码</p>
</div>)

感谢您的阅读!

喜欢代码艺术性的跟我一起研究吧,呵呵 !

本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC3系列~使用Func<string, HelperResult>实现访问权限的设计,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
7月前
|
前端开发 JavaScript Java
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
springboot 出现 Cannot resolve MVC View ‘index‘ 问题解决办法,前后端不分离项目前端文件存放位置,已经如何访问
789 1
|
缓存 前端开发 JavaScript
Spring MVC跨资源访问
你好看官,里面请!今天笔者讲的是 Spring MVC跨资源访问 .不懂可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途。
784 9
Spring MVC跨资源访问
|
前端开发 Java Spring
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
233 0
|
缓存 前端开发 Oracle
基于 .NET Core MVC 的权限管理系统
基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单。它可以用于所有的Web项目,例如网站管理后台、CMS、CRM、ERP、OA这类的系统和移动端Api。
319 0
基于 .NET Core MVC 的权限管理系统
|
前端开发 JavaScript Java
Spring MVC框架:第五章:静态资源访问与mvc:view-controller
Spring MVC框架:第五章:静态资源访问与mvc:view-controller
110 0
Spring MVC框架:第五章:静态资源访问与mvc:view-controller
|
存储 算法 安全
初阶C++——STL——string类、vector类和list类(使用方法+模拟实现+测试+思路分析)
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本--所有STL实现版本的始祖。
366 0
初阶C++——STL——string类、vector类和list类(使用方法+模拟实现+测试+思路分析)
|
编译器 C语言 C++
C++从入门到精通(第七篇) :string类的讲解和模拟实现 (copy)
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。
260 0
C++从入门到精通(第七篇) :string类的讲解和模拟实现 (copy)
|
C语言 C++
【C++】STL——string模拟实现(1)
【C++】STL——string模拟实现(1)
86 0
【C++】STL——string模拟实现(1)
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“
179 0
编写一个函数reverse_string(char*string),实现将参数字符串中的倒叙 如 char arr[]=“abcdef“变为“fedcba“