實現對ASP.NETMvc及Asp.NetCore的許可權控制

来源:https://www.cnblogs.com/weihanli/archive/2018/05/17/accesscontrolhelper.html
-Advertisement-
Play Games

項目基於 .NETStandard,同時支持 asp.net mvc(.NET faremwork4.5以上) 和 asp.net core 項目(asp.net 2.0以上),基於 ASP.NET MVC 和 ASP.NET Core 實現的對 `Action` 的訪問控制以及頁面元素的許可權控制。 ...


AccessControlHelper

WeihanLi.AspNetMvc.AccessControlHelper
NuGet Downloads

Build Status

Build status

Build Status

Intro

由於項目需要,需要在 基於 Asp.net mvc 的 Web 項目框架中做許可權的控制,於是才有了這個許可權控制組件。

項目基於 .NETStandard,同時支持 asp.net mvc(.NET faremwork4.5以上) 和 asp.net core 項目(asp.net 2.0以上),基於 ASP.NET MVC 和 ASP.NET Core 實現的對 Action 的訪問控制以及頁面元素的許可權控制。

GetStarted

  1. Nuget Package https://www.nuget.org/packages/WeihanLi.AspNetMvc.AccessControlHelper/

安裝許可權控制組件 WeihanLi.AspNetMvc.AccessControlHelper

asp.net:

Install-Package WeihanLi.AspNetMvc.AccessControlHelper

asp.net core:

dotnet add package WeihanLi.AspNetMvc.AccessControlHelper

  1. 實現自己的許可權控制顯示策略類

    • 實現頁面元素顯示策略介面 IControlAccessStrategy
    • 實現 Action 訪問顯示策略介面 IActionAccessStrategy

    示例代碼:

  2. 程式啟動時註冊自己的顯示策略

    • asp.net mvc

    可基於Autofac實現的依賴註入,在 autofac 的 Ioc Container中註冊顯示策略,並返回一個可以從Ioc Container中獲取對象的委托或者實現 IServiceProvider 介面的對象,參考:https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/PowerControlDemo/Global.asax.cs#L23

    //autofac ContainerBuilder
    var builder = new ContainerBuilder();
    // etc...
    
    // register accesss control
    builder.RegisterType<ActionAccessStrategy>().As<IActionAccessStrategy>();
    builder.RegisterType<ControlAccessStrategy>().As<IControlAccessStrategy>();
    var container = builder.Build();
    // Important
    AccessControlHelper.RegisterAccessControlHelper<ActionAccessStrategy, ControlAccessStrategy>(type => container.Resolve(type));
    • asp.net core

    Startup 文件中註冊顯示策略,參考https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/AccessControlDemo/Startup.cs

    // Configure
    app.UseAccessControlHelper();
    
    // ConfigureServices
    services.AddAccessControlHelper<ActionAccessStrategy, ControlAccessStrategy>();
  3. 控制 Action 的方法許可權

    通過 AccessControlNoAccessControl Filter 來控制 Action 的訪問許可權,如果Action上定義了 NoAccessControl 可以忽略上級定義的 AccessControl,另外可以設置 Action 對應的 AccessKey

    使用示例:

    [NoAccessControl]
    public IActionResult Index()
    {
        return View();
    }
    
    [AccessControl]
    public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";
    
        return View();
    }
    
    [AccessControl(AccessKey = "Contact")]
    public IActionResult Contact()
    {
        ViewData["Message"] = "Your contact page.";
    
        return View();
    }
  4. 控制頁面元素的顯示

    為了使用比較方便,建議在頁面上導入命名空間,具體方法如下,詳見 Samples:

    • asp.net mvc

      在 項目的 Views 目錄下的 web.config 文件中添加命名空間 WeihanLi.AspNetMvc.AccessControlHelper

      <system.web.webPages.razor>
          <pages pageBaseType="System.Web.Mvc.WebViewPage">
              <namespaces>
                  <add namespace="System.Web.Mvc" />
                  <add namespace="System.Web.Mvc.Ajax" />
                  <add namespace="System.Web.Mvc.Html" />
                  <add namespace="System.Web.Optimization"/>
                  <add namespace="System.Web.Routing" />
                  <add namespace="PowerControlDemo" />
                  <add namespace="WeihanLi.AspNetMvc.AccessControlHelper" /><!-- add WeihanLi.AspNetMvc.AccessControlHelper-->
              </namespaces>
          </pages>
      </system.web.webPages.razor>
    • asp.net core

      在 Views 目錄下的 **_ViewImports.cshtml** 中引用命名空間 WeihanLi.AspNetMvc.AccessControlHelper

      @using AccessControlDemo
      @using WeihanLi.AspNetMvc.AccessControlHelper// add WeihanLi.AspNetMvc.AccessControlHelper
      @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

    通過 HtmlHelper 擴展方法來實現許可權控制

    • SparkContainer

      @using(Html.SparkContainer("div",new { @class="container",custom-attribute = "abcd" }))
      {
          @Html.Raw("1234")
      }
      
      @using (Html.SparkContainer("span",new { @class = "custom_p111" }, "F7A17FF9-3371-4667-B78E-BD11691CA852"))
      {
          @:12344
      }

      沒有許可權訪問就不會渲染到頁面上,有許可權訪問的時候渲染得到的 Html 如下:

      <div class="container" custom-attribute="abcd">1234</div>
      
      <span class="custome_p111">12344</span>
    • SparkLink

      @Html.SparkLink("Learn about me &raquo;", "http://weihanli.xyz",new { @class = "btn btn-default" })

      有許可權訪問時渲染出來的 html 如下:

      <a class="btn btn-default" href="http://weihanli.xyz">Learn about me »</a>
    • SparkButton

       @Html.SparkButton("12234", new { @class= "btn btn-primary" })

      有許可權訪問時渲染出來的 html 如下:

      <button class="btn btn-primary" type="button">12234</button>

Contact

如果您在使用中遇到了問題,歡迎隨時與我聯繫。

Contact me: [email protected]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 禁止任何商業性的轉載,轉載請帶上原文鏈接。 聽君一席話,勝讀十年書。 1、扎實的python基礎 個人的技術基礎知識是否扎實,決定了個人是否能夠做的工作層次。 比如某些Python半吊子,只能夠紙上談兵,和Python小白談談人生理想,而只要涉及到技術層次的實戰,他也許和你一樣,啥也做不好。 那麼P ...
  • 話不多說,直接上代碼! 結尾: 進入設計院兩周,發現市面上的Revit插件與設計院的需求差距還是很大的,設計院對視圖的顯示方面的要求較高。一個人在中心從事Revit插件開發壓力山大啊,告訴自己慢慢來,能贏! ...
  • 開發游戲設置選項遇到一個問題,我有兩個枚舉,一個是屏幕解析度,一個是語言 我需要在不知道一個枚舉到底是哪一個枚舉類型的情況下,獲取這個枚舉的值以及這個枚舉類型的所有可能值。 比如 Enum b = ScreenSize._1280x720; 我希望我能獲取到他的值 1 和所有可能值 _1920x10 ...
  • /// /// 密碼加密解密操作相關類 /// public static class EncryptHelper { #region MD5 加密 /// /// MD5加密 /// public static string Md532(this string so... ...
  • 在之前版本的代碼生成工具Database2Sharp中,由於代碼生成都是考慮Winform和Web通用的目的,因此Winform界面或者Web界面都是單獨生成的,在工具中生成相應的界面後,複製到項目裡面去使用即可。由於我們Winform的界面是模塊化的方式獨立開發,因此對某些表來說,我們可以獨立開發... ...
  • 前言 經過多次的重構,目前BitAdminCore框架已經基本上穩定,近期對代碼進行多次重構,讓代碼保持更整潔。 為促進框架的推廣,更好的實現價值分享,即日起推出更新日誌系列,每次更新內容進行描述。 20180516更新 1、流程設計器的代碼重構,減少大概1000多行代碼,表結構也做了調整。 2、文 ...
  • SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH ...
  • 引言 對Excel表格設置分頁對我們預覽、列印文檔時是很方便的,特別是一些包含很多複雜數據的、不規則的表格,為保證列印時每一頁的排版美觀性或者數據的前後連接的完整性,此時的分頁符就發揮了極大的作用。因此,本文將介紹C#設置Excel分頁的方法。當然,對於Excel表格中已有的分頁符,如果我們也可以根 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...