ABP開發框架前后端開發系列---(9)ABP框架的權限控制管理

在前面兩篇隨筆《ABP開發框架前后端開發系列---(7)系統審計日志和登錄日志的管理》和《ABP開發框架前后端開發系列---(8)ABP框架之Winform界面的開發過程》開始介紹了權限管理的內容,其中只是列出了內部的權限系統的審計和登陸信息,以及對Winform界面的整合,本篇隨筆繼續介紹ABP開發框架的權限控制管理內容,包括用戶、角色、機構、權限等方面,以及該框架在Winform方面的應用集成。

1、ABP框架的權限控制管理內容

我們知道,權限管理一般都會涉及到用戶、組織機構、角色,以及權限功能等方面的內容,ABP框架的基礎內容也是涉及到這幾方面的內容,其中它們之間的關系基本上是多對多的關系,它們的關系如下所示。

不過在官網下載的框架里面,包含權限管理這些應用服務層和展示層的內容并不完整,只是簡單的包括了用戶和角色的基礎管理,而且很多權限管理所需要的基礎功能并沒有提供。

根據ABP框架提供的基礎數據庫表,我們可以進一步整理權限管理幾個重要概念和真實數據庫表之間的對應關系,基于這個基礎上,我們可以完善整個權限管理模塊內容。

上圖是ABP基礎框架中權限模塊里面包含的一些主對象表和中間表,中間表主要用來存儲兩個對象之間的多對多關系,如角色包含多個用戶,用戶屬于多個機構,機構包含多個角色等等。

?

2、基于ABP框架的權限管理模塊

1)組織機構管理?

組織機構主要就是一個層級的對象關系,一般包含但不限于公司、部門、工作組等的定義,其中組織機構包含用戶成員和角色成員的關系,如下界面所示。

組織機構包含的成員可以添加多個人員記錄,添加界面如下所示。

添加角色界面如下所示。

?

?2)角色管理

角色信息沒有層級關系,可以通過列表展示。

其中角色包含權限分配和角色成員的維護,如下是角色編輯界面,包含角色基本信息、權限、成員管理等。

角色的權限包含系統可以用的權限,并可以勾選為角色設置所需的功能點,如下界面所示。

用戶成員則和機構的用戶管理一樣,可以指定多個用戶。

3)用戶管理

用戶管理只需要管理用戶基本的信息即可,我們如果需要分配角色可以在角色管理里面統一處理。當然,創建用戶的時候,也可以ABP框架的收費版本界面一樣,為用戶指定角色和機構信息。

我這里主要是維護用戶信息即可,用戶列表界面如下所示。

用戶編輯或者查看界面,除了可以看用戶基礎信息外,可以查看用戶包所屬的機構(多個),或者所屬的角色(多個)

當然可以查看這個用戶本身擁有的權限功能點,如下界面所示。

4)權限功能

?嚴格來說,ABP框架并沒有統一管理好權限功能點的,它沒有任何表來存儲這個功能集合,而是通過派生AuthorizationProvider的子類來定義權限功能點,這種需要通過指定AuthorizationProvider的子類的方式創建功能點,需要每次系統模塊增加功能點的時候,編碼一下,然后增加自己的功能點,如下界面所示。

這種方式可能能夠滿足大多數的需要,不過我如果需要增量開發,或者動態增加某些功能點的時候,就有點不方便了。

我在這個基礎上引入了一個權限功能的表用來存儲功能點的,然后提供管理界面來動態維護這些功能點。如下界面所示。

這樣我可以動態添加或者批量添加所需要的功能點,并且和整個權限管理模塊串聯起來,形成一個完整的控制體系。

?

這些概念主要還是來源于我的Winform開發框架和混合式開發框架里面的控制思路,以及界面展示的處理。

這樣我們就可以管理自己的權限功能點,并可以為指定的角色配置相關的控制功能點,如下表所示是角色的權限集合(系統中間表),也就是給角色分配的功能點,依舊是在原來的系統表里面存儲。

?

3、權限控制在業務模塊界面中的使用

我們擁有了用戶、角色、機構、權限功能以及它們之間的關系后,我們可以按照一個完善的權限系統來創建對應的用戶角色權限關系,并通過在客戶端對界面權限的判斷和服務端對操作權限的判斷,實現完整的控制處理。

服務端由ABP框架內置權限進行管理,通過在AppService里面定義好增刪改查等權限點,如引用服務層的基類設置了幾個權限點的屬性。

我們在子類里面指定這些操作的變量即可,如產品應用服務中,我們可以定義CreatePermissionName為 Product/Add 這樣的名稱,當然也可以自定義。

然后每次在Action中調用相應的檢查即可,如下是對創建的判斷檢查。

或者更新操作的權限檢查

如果對于導入、導出等其他權限,我們則可以通過調用

void CheckPermission(string permissionName);

來進行自己自定義權限名稱的判斷。

在客戶端,我們登錄成功后,獲取用戶的權限集合,然后在客戶端進行判斷即可進行權限的控制管理,可以控制菜單、按鈕等界面元素,如下是整合了權限控制的產品信息管理界面。

分頁列表展示界面的控制代碼如下所示。

編輯或者查看界面的控制代碼如下所示

這樣我們 就可以整合了權限到業務管理模塊里面,實現對菜單、按鈕等元素的權限控制了。

首先在權限管理系統模塊里面為用戶角色添加對應的產品管理權限點。

產品信息界面展示如下所示。

如果在權限模塊的角色里面取消對應的功能點,那么產品管理功能不可用。

?

轉載于:https://www.cnblogs.com/wuhuacong/p/11065811.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448661.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GIL , 線程池 , 同步 , 異步 , 隊列 , 事件

一.什么是GIL 官方解釋:In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (Howev…

Docker - Compose 使用說明、詳解docker-compose

Compose 模板文件 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。但大家不用擔心,這里面大部分指令…

在Windows下使用OpenCL配置

前言 目前,NVIDIA 和 AMD 的 Windows driver 均有支持OpenCL(NVIDIA 的正式版 driver 是從自195.62 版開始,而 AMD則是從9.11 版開始)。NVIDIA 的正式版 driver 中包含 OpenCL.dll,因此可以直接使用。AMD 到目前為止…

Linux下啟動mongodb

完成安裝mongodb(略) 創建數據目錄: # mkdir /data/mongo 創建配置文件 # vi /data/mongo/mongodb.cnf dbpath/data/mongo/ logpath/data/mongo/mongo.log logappendtrue forktrue port27017 或者:不創建配置文件通過mongod參數啟…

Linux調優(文件系統)

查看單個文件是否發生碎片化(被存在磁盤非連續磁盤塊上)# filefrag -v /var/log/messages 查看文件系統是否存在大量碎片(會顯示空閑離散的塊)# dumpe2fs /dev/sda1 檢查文件系統中是否有錯誤產生# fsck /dev/sdb1 1、格式化相關 …

使用 nohup 設置后臺進程

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 引言: 有時候需要在Linux上設置一個后臺進程,但是當你關閉terminal之時,它會被系統kill掉&#xff0…

CVE-2019-0708 BlueKeep的掃描和打補丁

2019獨角獸企業重金招聘Python工程師標準>>> 簡介 CVE-2019-0708 BlueKeep是一個Windows遠程桌面服務的遠程代碼執行漏洞,其危害程度不亞于CVE-2017-0143 EternalBlue,該漏洞影響了某些舊版本的Windows系統。此漏洞是預身份驗證,無…

《OpenCL異構計算》新版中譯本派送中!

《OpenCL異構計算1.2》新鮮出爐,目前市面上仍一書難求!我們已向清華出版社訂購到第一批新書。關注異構開發社區,積極參與,就有可能免費獲取新書! 1.如果您異構社區的老朋友,請關注:10.1假期后我…

centOS安裝Ftp

1、查看是否安裝 rpm -q vsftpd 2、安裝方法 yum install -y vsftpd 3、查看安裝位置 whereis vsftpd 4、服務管理 //服務狀態systemctl status vsftpd.service//服務啟動systemctl start vsftpd.service//服務停止systemctl stop vsftpd.service//開啟啟動systemctl enable vs…

查看、關閉當前服務器上啟動服務 / 進程

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我用 java -jar 的方式啟動了一個服務,然后要關閉這個服務 / 進程。 1. ps -aux 查看當前進程,整個列表最 后一…

Python基礎小結

目錄 一、執行Python程序的兩種方式1.1 交互式1.2 命令行式二、執行Python程序的兩種IDE2.1 Pycharm2.2 Jupyter三、變量3.1 什么是變量?3.2 變量的組成?3.3 變量名的定義規范3.4 定義變量的兩種方式3.5 常量四、注釋4.1 單行注釋4.2 多行注釋4.3 引用計數4.4 垃圾回收機制4.…

Booster 系列之——多線程優化

項目地址:github.com/didi/booste… 對于開發者來說,線程管理一直是最頭疼的問題之一,尤其是業務復雜的 APP,每個業務模塊都有著幾十甚至上百個線程,而且,作為業務方,都希望本業務的線程優先級最…

OpenCL

OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的并行編程的開放式、免費標準,也是一個統一的編程環境,便于軟件開發人員為高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼…

dubbo的底層原理

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、Duboo基本概念解釋 Dubbo是一種分布式服務框架。 Webservice也是一種服務框架,但是webservice并不是分布式的服務框架&…

BOM屬性對象方法

本文原鏈接:https://cloud.tencent.com/developer/article/1018747 BOM 1.window對象 2.location對象 3.history對象 BOM也叫瀏覽器對象模型,它提供了很多對象,用于訪問瀏覽器的功能。BOM缺少規范,每個瀏覽器提供商又按照自己想法…

nginx+php+mysql+haproxy+keepalived+NFS,搭建wordpress

實現LNMP 實現環境: 服務版本系統CentOS7.6Mysql5.6.34Nginx1.14.2PHP7.1.30HAProxy1.8.20Keepalived1.3.5NFS1.3.0主機IPMysql_master192.168.37.108Mysql_slave192.168.37.105NginxPHP192.168.37.103NginxPHP192.168.37.104HAProxyKeepalived192.168.37.101HAPro…

OpenCL “速成”沖刺【第一天】

話說軟件開發從來沒有速成一說,一門語言你學的越快,說明你在別的語言上下個功夫越多,所以這次加了引號,只不過幾周之后可能會有一個公司內部OpenCL的考核,雖然本人不需要考核,不過也正好借機整理下之前Open…

Java8函數式編程

最近使用lambda表達式,感覺使用起來非常舒服,箭頭函數極大增強了代碼的表達能力。于是決心花點時間深入地去研究一下java8的函數式。 一、lambda表達式 先po一個最經典的例子——線程 public static void main(String[] args) {// Java7new Thread(new R…

電腦如何獲得管理員權限

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我只是記錄下,方便以后查看。 參見: https://jingyan.baidu.com/article/ab69b270ff426e2ca6189f54.html

.NET混淆器 Dotfuscator如何保護應用程序?控制流了解一下!

Dotfuscator是一個.NET的Obfuscator。它提供企業級的應用程序保護,大大降低了盜版、知識產權盜竊和篡改的風險。Dotfuscator的分層混淆、加密、水印、自動失效、防調試、防篡改、報警和防御技術,為世界各地成千上萬的應用程序提供保護。 Dotfuscator提供…