AppBoxFuture(低代碼快速開發框架): 組織結構及權限體系

  權限體系是用於約束用戶訪問或操作資源的權利,這裡的“資源”可以指數據,也可以指特定的功能(如審核訂單)。通常的權限體系設計是基於角色的訪問控制方式,用戶通過角色與權限進行關聯。作者的實現方式稍微有些不同,通過組織結構樹與權限進行關聯,這樣可以實現子級節點繼承上級節點設置的權限。

一、數據結構

AppBoxFuture(低代碼快速開發框架): 組織結構及權限體系

  • 組織單元(OrgUnit):根據上級標識自引用的表結構,另通過EntityRef引用組織或工作組或員工;
  • 權限模型(PermissionModel):框架內置的元數據,包含已賦予權限的組織單元集合。

二、權限設置

  • 開發時根據業務需要,通過IDE主菜單->New->Permission新建權限模型,另可通過New->Folder創建模型文件夾分門別類管理相關模型;
  • 運行時通過OrgUnits視圖(暫簡單實現,如下圖所示)選擇組織單元,然後在“權限設置”面板勾選相應的權限。

注意:請勿將Admin用戶的Admin權限取消掉,未做判斷會導致無權限。

AppBoxFuture(低代碼快速開發框架): 組織結構及權限體系

三、權限驗證

內部用戶登錄流程

  1. 根據賬號與密碼查詢員工並驗證密碼;
  2. 查詢員工映射的組織單元,形成組織單元路徑(如:/公司/部門/員工);
  3. 以組織單元路徑新建並緩存會話信息。

注意:系統默認的Admin密碼:760wb,Test密碼:la581

服務內驗證權限

  調用服務時,根據會話的組織單元路徑與指定的權限比對,可判斷當前用戶是否具備特定的權限。

注意:目前未驗證權限的服務所有人均可調用

  • 服務方法Attribute方式
[InvokePermission(Permissions.Admin || Permissions.Developer)] //可組合
public async Task<entitylist>> LoadTreeList()
{
var q = new TableScan<entities.orgunit>();
return await q.ToTreeListAsync(t => t.Childs);
}

/<entities.orgunit>/<entitylist>
  • 服務方法內代碼驗證方式
public async Task SaveOrder(Entities.Order order)
{
if (!Permissions.SaveOrder)
throw new Exception("不具備操作權限");
await EntityStore.SaveAsync(order);
}

四、本篇小結

  本篇主要介紹了框架集成的權限體系的實現方式,如果您有問題或Bug報告,請留言或在[Github](https://github.com/enjoycode/appbox.deploy)提交Issue。


分享到:


相關文章: