• 爱上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>)

    感谢您的阅读!

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

     回到目录

  • 相关阅读:
    MyEclipse修改Servlet模板
    AndroidStudio启动时不自动打开项目
    Android Studio启动时出现unable to access android sdk add-on list
    基础概述
    Java环境变量设置
    eclipse安装adt插件
    设置一个.exe文件开机启动
    笔记本玩游戏设置全屏
    记一次服务器病毒查杀过程:lsass.exe占用内存高
    LayUI制作日历工作记录簿
  • 原文地址:https://www.cnblogs.com/lori/p/2815908.html
Copyright © 2020-2023  润新知