1. 程式人生 > >細粒度通用許可權管理框架(可控制表格行內按鈕)原始碼提供下載

細粒度通用許可權管理框架(可控制表格行內按鈕)原始碼提供下載

特別宣告:

提供的原始碼已經包含了 AppBoxPro 的全部原始碼,用 VS2012 開啟專案後,直接 Ctrl+F5 可以執行起來(預設使用VS自帶的LocalDB資料庫)。

FineUIPro是商業程式,僅包含v1.7.0公測版的DLL;當然你也可以自行把 FineUIPro 換成 FineUI(開源版),開源版下載地址

AppBoxPro 是基於 FineUIPro 和 Entity Framework 的通用許可權管理框架,包括使用者管理、職稱管理、部門管理、角色管理、角色許可權管理等模組。

之前我曾經寫過文章介紹AppBox,不過主要集中在 EntityFramework的使用上:

今天,除了公開 AppBoxPro 的最新原始碼外,我主要介紹下如果做到將許可權控制到表格行內按鈕。

1. AppBox架構分析

AppBox中的許可權管理涉及幾個概念:角色、使用者、許可權、頁面

  1. 角色:用來對使用者進行分組,許可權實際上是和角色對應的
  2. 使用者:一個使用者可以屬於多個角色
  3. 許可權:頂級許可權列表,比如“CoreDeptView”的意思是部門瀏覽許可權,為了方便許可權管理,我們還給許可權一個簡單的分組
  4. 頁面:使用者操作的載體,一個頁面可以擁有多個許可權,這個控制是在頁面程式碼中進行的,主動權在頁面

用一張圖來概述這個架構:

 

2. 許可權與頁面、角色的關係

2.1 許可權與頁面:之前我們提到頁面擁有哪些許可權,這個定義是在頁面程式碼中的,而不是存在於資料庫中。

這就提供更大程式的靈活性,相當於每個頁面都可以從整個站點的許可權集合中選擇自己需要的許可權。

比如,部門列表頁面(dept.aspx),我們需要應用“部門瀏覽許可權”,這個程式碼是定義在 dept.aspx.cs 中的:

public partial class dept : PageBase
{

	/// <summary>
	/// 本頁面的瀏覽許可權,空字串表示本頁面不受許可權控制
	/// </summary>
	public override string ViewPower
	{
		get
		{
			return "CoreDeptView";
		}
	}

由於“瀏覽許可權”每個頁面都可能會用到,所以我們將處理“瀏覽許可權”的程式碼放在基類 PageBase.cs 中:

public class PageBase : System.Web.UI.Page
{
	protected override void OnInit(EventArgs e)
	{
		base.OnInit(e);

		// 此使用者是否有訪問此頁面的許可權
		if (!CheckPowerView())
		{
			CheckPowerFailWithPage();
			return;
		}

在 CheckPowerView 中,則需要拿到當前登陸使用者所屬的角色,然後查詢此角色是否擁有 “CoreDeptView” 許可權的定義:

/// <summary>
/// 檢查當前使用者是否擁有當前頁面的瀏覽許可權
/// 頁面需要先定義ViewPower屬性,以確定頁面與某個瀏覽許可權的對應關係
/// </summary>
/// <returns></returns>
protected bool CheckPowerView()
{
	return CheckPower(ViewPower);
}

/// <summary>
/// 檢查當前使用者是否擁有某個許可權
/// </summary>
/// <param name="powerType"></param>
/// <returns></returns>
protected bool CheckPower(string powerName)
{
	// 如果許可權名為空,則放行
	if (String.IsNullOrEmpty(powerName))
	{
		return true;
	}

	// 當前登陸使用者的許可權列表
	List<string> rolePowerNames = GetRolePowerNames();
	if (rolePowerNames.Contains(powerName))
	{
		return true;
	}

	return false;
}

還要注意一點:兩個頁面可能需要用到同一個許可權

並且這個許可權出現在頁面中的邏輯會截然不同,比如“CoreDeptEdit”許可權(編輯部門):

在dept.aspx頁面,用來控制表格行內按鈕的啟用禁用狀態:

protected void Grid1_PreDataBound(object sender, EventArgs e)
{
	// 資料繫結之前,進行許可權檢查
	CheckPowerWithWindowField("CoreDeptEdit", Grid1, "editField");
	CheckPowerWithLinkButtonField("CoreDeptDelete", Grid1, "deleteField");
}

在dept_edit.aspx頁面,用來控制對此頁面的瀏覽許可權:

public partial class dept_edit : PageBase
{
	public override string ViewPower
	{
		get
		{
			return "CoreDeptEdit";
		}
	}

2.2 許可權與角色:這個對應關係是定義在資料庫中的,相應的頁面操作介面如下所示。

3. 將許可權控制到表格行內按鈕

經過上面的介紹,我們對AppBox中的許可權控制有個大致的瞭解。

下面,我們通過一個小案例來介紹如何將許可權控制到表格行內按鈕,還是以“CoreDeptEdit”這個許可權為例。

3.1. 首先管理員(admin)登陸

3.2. 新建一個角色(測試角色)

3.3. 一個屬於本角色使用者(testuser)

3.4. 將 testuser 新增到測試角色

 

3.5. 為測試角色設定許可權(注意,“編輯部門”許可權沒有選中)

3.6. 用新建立的使用者 testuser 登陸

3.7. 新使用者 testuser 沒有編輯部門的許可權

關鍵程式碼(更加詳細的實現,請自行下載全部原始碼):

在 dept.aspx.cs 中:

public partial class dept : PageBase
{
	protected void Grid1_PreDataBound(object sender, EventArgs e)
	{
		// 資料繫結之前,進行許可權檢查
		CheckPowerWithWindowField("CoreDeptEdit", Grid1, "editField");
		

在 PageBase.cs 中:

public class PageBase : System.Web.UI.Page
{
	protected void CheckPowerWithWindowField(string powerName, FineUIPro.Grid grid, string columnID)
	{
		if (!CheckPower(powerName))
		{
			CheckPowerFailWithWindowField(grid, columnID);
		}
	}

	protected void CheckPowerFailWithWindowField(FineUIPro.Grid grid, string columnID)
	{
		FineUIPro.WindowField btn = grid.FindColumn(columnID) as FineUIPro.WindowField;
		btn.Enabled = false;
		btn.ToolTip = CHECK_POWER_FAIL_ACTION_MESSAGE;
	}

小結

AppBox的許可權控制非常靈活和簡單,並且提供細粒度到頁面上的每個角落,不僅僅是頁面瀏覽、編輯、刪除、新增,甚至可以是某個特定按鈕的啟用禁用、某個DIV的顯示隱藏、某個面板的摺疊展開,其實控制權就在你的手裡面。

求推薦

如果本文對你有所啟發或者幫助,請點選【推薦】按鈕,謝謝支援。

全部原始碼下載

相關推薦

粒度通用許可權管理框架控制表格按鈕原始碼提供下載

特別宣告: 提供的原始碼已經包含了 AppBoxPro 的全部原始碼,用 VS2012 開啟專案後,直接 Ctrl+F5 可以執行起來(預設使用VS自帶的LocalDB資料庫)。 FineUIPro是商業程式,僅包含v1.7.0公測版的DLL;當然你也可以自行把 FineUIPro 換成 Fine

【限時免費】AppBoxCore - 粒度許可權管理框架EFCore+RazorPages+async/await

目錄 前言 全新AppBoxCore RazorPages 和 TagHelpers 技術架構 頁面處理器和資料庫操作的非同步呼叫 Authorize特性和自定義許可權驗證過濾器 Authorize登入授權 自定義CheckPower許可權過濾器 CheckPower特性控制頁面的瀏覽許可權 表格行連結圖示

基於CIcodeigniter通用許可權管理系統擁有完整RBAC許可權模型,php開發

大概利用一個月時間吧,把RBAC許可權模型熟悉了一遍,開發了一套通用系統,主要模組包括以下:1、機構管理:可多級新增、刪除等2、使用者管理:可批量新增、刪除等3、模組管理:配置功能目錄樹形顯示4、角色管

SpringBoot整合mybatis、shiro、redis實現基於資料庫的粒度動態許可權管理系統例項

1.前言 本文主要介紹使用SpringBoot與shiro實現基於資料庫的細粒度動態許可權管理系統例項。 使用技術:SpringBoot、mybatis、shiro、thymeleaf、pagehelper、Mapper外掛、druid、dataTables

Shiro許可權管理框架:Shiro的基本使用

首發地址:https://www.guitu18.com/post/2019/07/26/43.html 核心概念 Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大

Shiro許可權管理框架:Shiro結合Redis實現分散式環境下的Session共享

首發地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基於Redis實現分散式環境下的Session共享。在講Session共享之前先說一下為什麼要做Session共享。 為什麼要做Session共享 什麼是Ses

Shiro許可權管理框架:Shiro中許可權過濾器的初始化流程和實現原理

本篇是Shiro系列第三篇,Shiro中的過濾器初始化流程和實現原理。Shiro基於URL的許可權控制是通過Filter實現的,本篇從我們注入的ShiroFilterFactoryBean開始入手,翻看原始碼追尋Shiro中的過濾器的實現原理。 初始化流程 ShiroFilterFactoryBean實現

Shiro許可權管理框架:深入分析Shiro中的Session管理

其實關於Shiro的一些學習筆記很早就該寫了,因為懶癌和拖延症晚期一直沒有落實,直到今天公司的一個專案碰到了在叢集環境的單點登入頻繁掉線的問題,為了解決這個問題,Shiro相關的文件和教程沒少翻。最後問題解決了,但我覺得我也是時候來做一波Shiro學習筆記了。 本篇是Shiro系列第四篇,Shiro中的過濾器

Shiro許可權管理框架:自定義Filter實現及其問題排查記錄

明確需求 在使用Shiro的時候,鑑權失敗一般都是返回一個錯誤頁或者登入頁給前端,特別是後臺系統,這種模式用的特別多。但是現在的專案越來越多的趨向於使用前後端分離的方式開發,這時候就需要響應Json資料給前端了,前端再根據狀態碼做相應的操作。那麼Shiro框架能不能在鑑權失敗的時候直接返回Json資料呢?答案

通用導出excel控制內容

timestamp data 設置 sheet 導出excel align ota 2.x getdate 實體類 package util; import java.sql.Timestamp; public class Book { private int

基於RBAC的許可權管理框架Shiro1框架簡介

Shiro是apache旗下一個開源框架,它將軟體系統的安全認證相關的功能抽取出來,實現使用者身份認證,許可權授權、加密、會話管理等功能,組成了一個通用的安全認證框架。也是當下比較主流的輕量級許可權管理框架。相較於spring security(原名Acegi)

Blazor 版 Bootstrap Admin 通用後臺許可權管理框架

前言 上一篇介紹過了前後臺分離的 NET Core 通用許可權管理系統 在這篇文章簡要的介紹了 Bootstrap Admin 後臺管理框架的一些功能。本篇文章帶來的是微軟最新出的 Blazor 版本的 NET Core 通用許可權管理系統 Blazor 簡介 至於 Blazor 是什麼,Blazor 的優缺

SpringBoot整合Shiro許可權管理框架

專案目錄結構 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://

uni-app呼叫原生的檔案系統管理選取附件上傳

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="tex

許可權管理系統許可權管理系統介紹

為什麼需要許可權管理 1、安全性:誤操作、人為破壞、資料洩露等; 2、資料隔離:不同的許可權能看到及操作不同的資料; 3、明確職責:運營、客服等不同角色,leader和dev等不同級別 許可權管理核心 1、使用者—許可權:人員少,功能固定,或者特別簡單的系統; 2、RBAC(Role-Based

許可權管理系統:RBAC新解,基於資源的許可權管理

本文討論以角色概念進行的許可權管理策略及主要以基於角色的機制進行許可權管理是遠遠不夠的。同時我將討論一種我認為更好的許可權管理方式。 1、什麼是角色 當說到程式的許可權管理時,人們往往想到角色這一概念。角色是代表一系列可執行的操作或責任的實體,用於限定你在軟體系統中能做什麼、不能做什麼。使用者帳號往往與角

PHP -Casbin: 支援 ACL、RBAC、ABAC 多種模型的 PHP 許可權管理框架

PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php-casbin/php-casbin ),目前在 GitHub 開源。PHP-Casbin 採用了元模型的設計思想,支援多種經典的訪問控制方案,如基於角色的訪問控制 RBAC、基於屬性的訪問

通用許可權管理概要設計說明書

  檔案更改摘要:   日期 版本號 修訂說明 修訂人 稽核人 批准人 2018-10-8 1.0 建立

Shiro許可權管理框架(1)

許可權管理:  1.什麼是許可權管理:基本上涉及到使用者參與的系統都要進行許可權管理,許可權管理屬於系統安全範疇,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略可以訪問而且只能訪問自己被授權的資源。    許可權管理包括使用者身份認證和授權兩

第六章 電子政務系統的使用者許可權管理 -- RBAC

政府部門的審批業務有著嚴格的許可權控制,不同級別不同身份的人員在審批流程中充當著不同的角色,超越許可權的審批行為被嚴格禁止。因此,要在政府審批中引入工作流技術,首先要解決好工作流的訪問控制問題,這既是審批流程控制的需要,也是審批系統安全的需要。結合政府部門的組織特點,本文重