導(dǎo)航 引子 場景梳理 基于角色的訪問控制(RBAC) 多租戶系統(tǒng)的權(quán)限設(shè)計 RuoYi系統(tǒng)的數(shù)據(jù)權(quán)限設(shè)計 最終設(shè)計方案 參考 本文首發(fā)《智客工坊-Saas多租戶數(shù)據(jù)權(quán)限設(shè)計(參考RuoYi)》,共計3656字,閱讀時長5min。 引子 最近公司打算把內(nèi)部的系統(tǒng)打造成商業(yè)化的Saas產(chǎn)品,我們組承擔(dān)了
最近公司計劃將內(nèi)部系統(tǒng)打造成商業(yè)化的Saas產(chǎn)品,我們組負(fù)責(zé)產(chǎn)品的研發(fā)任務(wù)。理論上,這套系統(tǒng)在公司內(nèi)部業(yè)務(wù)中已經(jīng)打磨了5年+,對于我們這個細(xì)分行業(yè)來說已經(jīng)非常成熟,只需要稍加改造,適配多租戶模式即可。但是,在項目架構(gòu)設(shè)計中,發(fā)現(xiàn)有很多需要重新梳理和考慮的地方。今天,主要是針對數(shù)據(jù)權(quán)限這塊的設(shè)計和大家分享一下。
在IM聊天場景中,有個很重要功能是,每個用戶都要查看自己的會話(聊天記錄)。比如,普通咨詢師可能就只能查看自己的聊天,主管可以查看組員咨詢師的聊天,CEO可以查看所有咨詢師的聊天。這樣的需求在我們的系統(tǒng)中應(yīng)該如何實現(xiàn)呢?
基于角色的訪問控制(Role-based access control,簡稱 RBAC),指的是通過用戶的角色(Role)授權(quán)其相關(guān)權(quán)限,這實現(xiàn)了更靈活的訪問控制,相比直接授予用戶權(quán)限,要更加簡單、高效、可擴展。
當(dāng)使用 RBAC 時,通過分析系統(tǒng)用戶的實際情況,基于共同的職責(zé)和需求,授予他們不同角色。你可以授予給用戶一個或多個角色,每個角色具有一個或多個權(quán)限,這種 用戶-角色、角色-權(quán)限 間的關(guān)系,讓我們可以不用再單獨管理單個用戶,用戶從授予的角色里面繼承所需的權(quán)限。
一般來說,我們會將用戶的權(quán)限分為菜單權(quán)限和數(shù)據(jù)權(quán)限。菜單權(quán)限:控制用戶能看到那些菜單或者按鈕。數(shù)據(jù)權(quán)限:控制用戶能看到的數(shù)據(jù)范圍。在開始設(shè)計之前,我們可以看看用戶登錄+授權(quán)的過程,在用戶返回的信息中就會包含角色(roleCodes)、菜單(permCodes)和數(shù)據(jù)權(quán)限(dataCodes)信息。所以,角色(roleCodes)、菜單(permCodes)和數(shù)據(jù)權(quán)限(dataCodes)就是需要我們提前設(shè)計好的。
根據(jù)IM自身的業(yè)務(wù),我們對角色的設(shè)計如下:咨詢師(counselor_role)、主管(manager_role)、管理員(admin_role)。菜單權(quán)限:賬號管理(zhanghaoguanli)、公共設(shè)置(gonggongshezhi)、...(根據(jù)實際情況定義)。令人頭疼的其實是數(shù)據(jù)權(quán)限的設(shè)計,我們期望定義一種通用的數(shù)據(jù)權(quán)限。所以,這里就不得不提到RuoYi系統(tǒng)。
在無意間,看到了一篇介紹RuoYi系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計分析的文章-《深入分析若依數(shù)據(jù)權(quán)限@datascope (注解+AOP+動態(tài)sql拼接) 【循序漸進,附分析過程】》。于是,筆者對這個開源系統(tǒng)進行了體驗。(點此處直達)[https://demo.ruoyi.vip/index]。登錄RuoYi系統(tǒng)后臺,映入眼簾的是一堆的大家再熟悉不過的系統(tǒng)菜單。
這里重點查看角色管理菜單,在列表的操作一欄,可以看到有個更多按鈕,展開更多按鈕,數(shù)據(jù)權(quán)限按鈕暴露出來。
點擊數(shù)據(jù)權(quán)限按鈕,就可以看到數(shù)據(jù)權(quán)限配置窗口。在這里可以看到數(shù)據(jù)權(quán)限分類如下:全部數(shù)據(jù)權(quán)限、自定義數(shù)據(jù)權(quán)限、本部門數(shù)據(jù)權(quán)限、本部門及以下數(shù)據(jù)權(quán)限、僅本人數(shù)據(jù)權(quán)限?梢钥吹竭@里的數(shù)據(jù)權(quán)限都是基于組織架構(gòu)設(shè)計的。需要指出的是,這里的自定義數(shù)據(jù)權(quán)限其實也是基于組織架構(gòu)的選擇,只是可以自由選擇(比如適配跨部門場景)?傮w來講,RuoYi系統(tǒng)數(shù)據(jù)權(quán)限的設(shè)計是中規(guī)中矩的,應(yīng)該屬于比較通用的設(shè)計。這也是我們目前的商業(yè)化項目設(shè)計中值得借鑒的。
或許還有更好的設(shè)計方案,歡迎大家提出更好的建議。
如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國產(chǎn)操作系統(tǒng)上實現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計到部署交付各階段說明
閱讀強化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)