【Blog.Core开源】框架集成部门权限
(Blog.Core框架功能點概述)
Blog.Core開源四年啦,一行行代碼凝結了大家的熱情和心血,基本功能骨架已完成,歡迎更多的公司和企業使用喲。真實公司留言蓋樓可獲得一對一技術指導:
https://github.com/anjoy8/Blog.Core/issues/75
書接上文,上回咱們說到了《【Blog.Core開源】將Program升級為.NET6.0版本》,終于將項目完全的升級到了6.0,而且6.0是一個三年的LTS版本,所以可以暫時穩定一段時間了。正好最近也把框架中最后一個版圖——數據部門權限,給集成進來了。當然每個公司的具體情況不一樣,我只是提供一個抽象的功能點,還需要各自在具體的情況中,做相應的修改。
PS:所有代碼已經全部更新到master分支,歡迎批評指正。
今天簡單說一下,部門權限設計的概要設計吧,如果不是很清晰,下次直播的時候,我再詳細的講講這一塊,配合著鑒權認證一起。
1、部門表結構概要設計
我們都知道,部門表結構其實挺簡單的,無非就是id、name、pid之類的常規設計,然后就是寫業務邏輯,做CURD接口了,其中稍微需要動腦筋考慮的事情就是如何做到級別的劃分和快速定位。
我這里先設計了一版,主要還多了一個關系碼的字段,用來表示當前部門的上游節點信息,每次更新的時候要同步更新,要注意:
這么設計的好處是方便我們快速的查找整個部門樹的關系,比如:
1、可以查詢0,1的所有同級部門,用equal即可滿足;
2、可以查詢0,1的所有子集部門,用contain即可,同時也可以進一步細分是所有子集還是下一級(用長度即可快速找到);
3、可以快速查詢當前部門的部門鏈(下文就會用到);
這樣部門權限就很清晰明了,因為快速定位部門樹關系對我們來說很重要。
剩下的就是CURD了,比較簡單,大家看Blog.Core源碼就行了,最終展示到頁面上的效果是這樣的:
(代碼下載后,生成種子數據,用超級管理員查看效果)
(部門樹型列表展示)
(添加部門,勾選父級部門)
2、給用戶綁定部門信息
有了部門信息,那我們就需要綁定到用戶上了,一般來說一個用戶肯定就是一個部門了,如果一定要實現多個部門,就需要繼續抽象一個邏輯模型了,下文會說到。
這塊邏輯比較簡單,就是在用戶表添加一個部門id就行,不用存放整個父級上游關系鏈,讓部門子領域處理就行,用戶不需要考慮這塊。最終的效果就是這樣的:
(用戶列表)
(用戶添加/編輯部門信息)
我們在把部門id存到數據庫里,然后通過部門表的CodeRelationship字段給帶出完全的部門名稱和部門id數組,是不是很方便,核心代碼是這樣的:
其實到了這里,用戶部門權限已經基本定型了,我們先考慮下以后怎么做劃分——我們編輯某條目標數據,比如是績效信息,每條目標數據都會有個UserId,那當前人登錄的時候,就根據UserId,查出來部門DepartmentId,就可以獲取整個部門的數據了。這是最簡單的最基礎的一套部門權限數據,但是我們肯定不會滿足于這種情況的。因為我們經常會有這個需求:
1、查詢我同級別的所有部門數據;
2、查詢我下屬的數據;
3、甚至是跨部門查詢數據;
那這個時候就需要我們再往上抽離一層,將用戶和部門關系進行融合,但是我把這塊邏輯給放到Role上了,整體流程是:
根據User查詢Role,根據Role查詢具體的控制Department的邏輯,從而實現目的。
3、角色和部門邏輯的綁定
這塊邏輯是可以放到User表的,但是這樣每個人都需要一一的標記,無法做到統一的處理,所以我還是放到了Role上,先看效果吧:
(Role增加一個權限范圍的抽象概念)
(權限范圍有六種級別)
可以看到這幾種級別就是上文咱們說到的那幾種關系:
我想查本部門的(普通人),僅僅自己的,全部的(公司老板),本部門及以下的(你的直屬leader),可以看到除了其他五種,還有一個自定義數據權限,支持跨部門查詢數據,這場景肯定有吧,比如風控部門,你懂的:
(權限范圍支持自定義權限分配)
4、總結
今天的分享暫時就先到這里了,代碼均已提交到GitHub的Master分支,最后再總結下整體結構設計:
一個人打開目標數據頁面,根據自己的角色信息,然后根據權限范圍機制,查找對應的部門,再根據部門來過濾到目標數據,所以需要同時也把部門id給冗余到目標數據表中,這樣方便查詢,當然,用sql語句兩表inner join也是可以的。
那最后再思考下,能不能做個統一過濾器或者AOP來處理呢,答案是肯定的,部門權限分享下期再給大家揭曉吧。
總結
以上是生活随笔為你收集整理的【Blog.Core开源】框架集成部门权限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Task.Factory.StartNe
- 下一篇: 发布nuget包的正确姿势---cicd