[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色爲基礎的訪問控制(RBAC)

[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色爲基礎的訪問控制(RBAC)

程序代碼下載

程序代碼下載:點此下載git

前言

ASP.NET Identity是微軟所貢獻的開源項目,用來提供ASP.NET的驗證、受權機制。而在ASP.NET Identity的功能模塊中:是採用Claims-Based驗證來提供驗證機制、而且實做Role-Based受權來提供受權機制。開發人員在系統內套用ASP.NET Identity後,就能夠像下列範例同樣定義用戶屬於哪一個角色、哪一個角色可使用那些功能,後續用戶經過驗證以後,就能夠依照角色受權來使用系統功能。github

ASP.NET Identity受權機制,能夠在系統運行中動態變動用戶所屬的角色,可是卻不能動態變動角色可使用的功能。這是由於在ASP.NET Identity裏,使用者屬於哪一個角色的設定儲存於數據庫能夠動態變動,而角色可使用那些功能的設定則是定義在程序代碼沒有辦法動態變動。雖然這樣的受權機制已經能夠符合大部分的開發需求,但在須要動態變動角色使用那些功能的開發項目中,開發人員就沒有機會使用到ASP.NET Identity豐富的驗證受權機制。數據庫

  • 領域模型瀏覽器

    前言01

  • 角色可使用那些功能工具

    public class HomeController : Controller
    {
        [Authorize(Roles = "Admin")]
        public ActionResult Contact() { ... }
    
        [Authorize(Roles = "Guest")]
        public ActionResult Contact() { ... }
    }
  • 使用者屬於哪一個角色設計

    前言02

本篇文章介紹一個基於ASP.NET Identity開發設計的驗證受權模塊:CLK.AspNet.Identity。這個驗證受權模塊提供以角色爲基礎的訪問控制(Role-based access control, RBAC),將系統受權拆解爲User(使用者)、Role(角色)、Permission(權限)。開發人員在系統內套用CLK.AspNet.Identity後,就能夠像下列範例同樣定義用戶屬於哪一個角色、哪一個角色擁有那些權限、權限可使用哪些功能,後續用戶經過驗證以後,就能夠依照角色權限來使用系統功能。code

CLK.AspNet.Identity受權機制,除了能夠繼續使用繼承自ASP.NET Identity的Claims-Based驗證機制以外,也能夠在系統運行中動態變動儲存於數據庫的受權設定:使用者所屬的角色、角色擁有的權限,讓系統的受權設定更加靈活多變,用以知足更多的用戶需求。繼承

  • 領域模型ip

    前言03

  • 權限可使用哪些功能開發

    public class HomeController : Controller
    {
        [RBACAuthorize(Permission = "AboutAccess")]
        public ActionResult Contact() { ... }
    
        [RBACAuthorize(Permission = "ContactAccess")]
        public ActionResult Contact() { ... }
    }
  • 權限屬於哪一個角色

    前言04

  • 使用者屬於哪一個角色

    前言05

安裝

  1. 首先開啓Visual Studio創建一個「徹底空白」的ASP.NET Web 應用程序。

    安裝01

    安裝02

  2. 接着開啓NuGet管理工具,搜尋並安裝:「CLK.AspNet.Identity.Mvc Template

    安裝03

  3. 安裝須要花費一些時間,安裝完畢後便可看到必要檔案都已加入至項目。

    安裝04

  4. 安裝好CLK.AspNet.Identity以後,按下Visual Studio的執行按鈕,就能夠在瀏覽器上看到預設的首頁內容。

    安裝05

  5. 回到Visual Studio開啓項目中的HomeController,能夠看到預設權限可使用哪些功能的程序代碼。

    public class HomeController : Controller
    {
        [RBACAuthorize(Permission = "AboutAccess")]
        public ActionResult Contact() { ... }
    
        [RBACAuthorize(Permission = "ContactAccess")]
        public ActionResult Contact() { ... }
    }

變動角色的權限

  1. 使用預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:About,由於guest@example.com屬於Guest羣組、而Guest羣組沒有AboutAccess權限,因此會收到403拒絕訪問的頁面內容。

    變動角色的權限01

    變動角色的權限02

    變動角色的權限03

  2. 使用預設的管理帳號登入(ID:admin@example.com, PW:admin),點擊頁面選單按鈕:PermissionsAdmin進入權限管理頁面,編輯AboutAccess權限,讓Guest羣組擁有AboutAccess權限。

    變動角色的權限04

    變動角色的權限05

  3. 更換回預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:About,由於如今Guest羣組擁有AboutAccess權限,因此能夠瀏覽About頁面內容。

    變動角色的權限06

變動使用者的角色

  1. 使用預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:Contact,由於guest@example.com屬於Guest羣組、而Guest羣組沒有ContactAccess權限,因此會收到403拒絕訪問的頁面內容。

    變動使用者的角色01

    變動使用者的角色02

    變動使用者的角色03

  2. 使用預設的管理帳號登入(ID:admin@example.com, PW:admin),點擊頁面選單按鈕:UsersAdmin進入使用者管理頁面,編輯guest@example.com使用者,讓guest@example.com使用者加入到Admin羣組。

    變動使用者的角色04

    變動使用者的角色05

  3. 更換回預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:Contact,由於如今guest@example.com屬於Admin羣組,而Admin羣組擁有ContactAccess權限,因此能夠瀏覽Contact頁面內容。

    變動使用者的角色06

新增系統的權限

  1. 回到Visual Studio編輯新功能,首先在HomeController增長一個新功能「News」、設定NewsAccess權限可使用這個功能,而且在Viwes裏面加上對應的變動。

    public class HomeController : Controller
    {
        [RBACAuthorize(Permission = "NewsAccess")]
        public ActionResult News()
        {
            ViewBag.Message = "Your news page.";
    
            return View();
        }
    }
  2. 按下Visual Studio的執行按鈕,能夠在瀏覽器上看到預設的首頁內容,而且內容中多了一個名稱爲News的頁面選單按鈕。

    新增系統的權限01

  3. 使用預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:News,這時由於系統裏沒有設定NewsAccess權限,因此會收到PermissionName not found.的錯誤訊息頁面。

    新增系統的權限02

    新增系統的權限03

    新增系統的權限04

  4. 使用預設的管理帳號登入(ID:admin@example.com, PW:admin),點擊頁面選單按鈕:PermissionsAdmin進入權限管理頁面,新增NewsAccess權限,而且讓Guest羣組擁有NewsAccess權限。

    新增系統的權限05

    新增系統的權限06

  5. 更換回預設的訪客帳號登入(ID:guest@example.com, PW:guest),點擊頁面選單按鈕:News,由於如今Guest羣組擁有NewsAccess權限,因此能夠瀏覽News頁面內容。

    新增系統的權限07

程序代碼下載

程序代碼下載:點此下載

相關文章
相關標籤/搜索