愛上MVC3系列~使用Func 實現訪問權限的設計


回到目錄

這個文章事實上也是一個系列,主要介紹小微對於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>)

感謝您的閱讀!

喜歡代碼藝術性的跟我一起研究吧,呵呵 !

 回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM