數(shù)據(jù)權(quán)限控制

1. 數(shù)據(jù)權(quán)限是什么?

在講數(shù)據(jù)權(quán)限之前,要先說一下功能權(quán)限;功能權(quán)限一般的管理后臺系統(tǒng)都會涉及到;即:某個人擁有什么角色,可以對哪些資源進行操作;
數(shù)據(jù)權(quán)限和功能權(quán)限一樣,也是一種對資源的保護;數(shù)據(jù)權(quán)限又可以分為“橫向權(quán)限”和“縱向權(quán)限”

橫向權(quán)限:即對數(shù)據(jù)行級別的限制

例如:角色A可以查看全部數(shù)據(jù);角色B只能查看50條數(shù)據(jù);

縱向權(quán)限:即數(shù)據(jù)列級別的限制

例如:角色C可以查看所有列,角色D只能查看3列數(shù)據(jù)

2. 數(shù)據(jù)權(quán)限如何設(shè)計?

個人理解:
既然數(shù)據(jù)權(quán)限和功能權(quán)限一樣,那么權(quán)限表(permission)里就可以創(chuàng)建一條數(shù)據(jù),類型定義為“數(shù)據(jù)權(quán)限”,至于數(shù)據(jù)規(guī)則的具體邏輯可以單獨用一個表(data_rule)存儲,然后data_rule 表里面引入permission表 Id字段
具體執(zhí)行邏輯:

  1. 用戶訪問一個資源
  2. 判斷該用戶是否有權(quán)限訪問該資源(即:功能權(quán)限)
  3. 如果可以訪問,判斷該接口是否啟用了數(shù)據(jù)權(quán)限規(guī)則
  4. 如果啟用數(shù)據(jù)規(guī)則,獲取該用戶擁有的角色,通過角色獲取數(shù)據(jù)規(guī)則權(quán)限
  5. 通過數(shù)據(jù)規(guī)則,動態(tài)修改查詢SQL
  6. 執(zhí)行SQL,返回結(jié)果;
    以上邏輯是否覺得有哪塊不對?
    在第四步的時候,通過角色獲取數(shù)據(jù)規(guī)則,數(shù)據(jù)規(guī)則可能有多個,那應(yīng)該怎么處理?
    例如:
    1)一個用戶是銷售經(jīng)理, 他可以看他以及他下屬的銷售業(yè)績; 對應(yīng)一條數(shù)據(jù)權(quán)限1
    2)查看客戶信息時,他能查看他下屬的客戶信息; 對應(yīng)一條數(shù)據(jù)權(quán)限2
    當(dāng)用戶訪問銷售業(yè)績的時候,如果按照之前的理論,應(yīng)該會得到兩條數(shù)據(jù)權(quán)限;但是這并不是我們想要的,我們只想得到數(shù)據(jù)權(quán)限1就可以。所以數(shù)據(jù)權(quán)限應(yīng)該是與接口對應(yīng)的,即:數(shù)據(jù)權(quán)限作用在哪個具體的接口上,這樣當(dāng)我們獲取到2條數(shù)據(jù)權(quán)限時,通過接口URL進行過濾,就可以找到只屬于這個接口的數(shù)據(jù)權(quán)限了;

3. 開源框架jeecg-boot 是如何做的?

下圖是jeecgboot 表設(shè)計的大致:


圖片.png

jeecg-boot框架里面的具體邏輯:

  1. 在使用數(shù)據(jù)權(quán)限的接口上用自定義注解@PermissionData標(biāo)識
  2. 編寫一個切面類PermissionDataAspect,攔截@PermissionData標(biāo)識的接口
  3. 當(dāng)用戶訪問一個帶有注解PermissionData的接口,首先會進入PermissionDataAspect類,該類的主要作用就是通過接口URL獲取作用在這條接口上的數(shù)據(jù)權(quán)限,然后把數(shù)據(jù)權(quán)限(即:數(shù)據(jù)規(guī)則)保存到上下文中。
  4. 當(dāng)進入到真正的接口中時,獲取數(shù)據(jù)規(guī)則,通過數(shù)據(jù)規(guī)則動態(tài)生成Sql語句。
  5. 執(zhí)行sql 并返回結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容