数据权限设计(原创)
數(shù)據(jù)權(quán)限是針對(duì)數(shù)據(jù)表中行級(jí)和列級(jí)的控制,相對(duì)操作權(quán)限,顆粒度更細(xì),復(fù)雜度更高,因?yàn)樵陧?xiàng)目中也有相關(guān)需求,是直接通過(guò)硬編碼sql查詢條件控制的,
后期維護(hù)起來(lái)比較困難。所以有了一些想法,后期也將在本人springBoot框架中實(shí)現(xiàn)。下面細(xì)說(shuō)下我的一些想法:
一、行級(jí)權(quán)限(數(shù)據(jù)范圍)
1、應(yīng)用場(chǎng)景:部門查詢范圍、區(qū)域查詢范圍、只能查看本人訂單等
2、實(shí)現(xiàn)方式:一般只能通過(guò)where條件去控制,但通過(guò)硬編碼方式,靈活度和維護(hù)度不高,建議通過(guò)按角色增加數(shù)據(jù)權(quán)限,達(dá)到和功能權(quán)限統(tǒng)一
3、具體實(shí)現(xiàn)(操作建議開發(fā)人員或DB人員維護(hù))
建一個(gè)行級(jí)權(quán)限范圍控制表 userId(用戶id)、sql_id(mapper方法名)、type(控制類型:1-本部門 2-包含下級(jí)部門 3-本用戶)、isUsed(是否使用)、otherWhere(其他條件語(yǔ)句可添加其他字段的范圍)
功能實(shí)現(xiàn):在用戶頁(yè)面添加按鈕數(shù)據(jù)權(quán)限,雙選項(xiàng)卡(行級(jí)數(shù)據(jù)、列級(jí)數(shù)據(jù))、行級(jí)數(shù)據(jù)錄入上述表中的字段
本人用的mybatis,使用攔截器攔截到sql,首先判斷行級(jí)權(quán)限是否啟用,判斷sqlId是否匹配。判斷類型,本部門則查詢登陸用戶所屬部門,
包含下級(jí)部門則需要使用遞歸,本用戶則查詢當(dāng)前登陸用戶的(這里建議設(shè)計(jì)所有表都有這個(gè)字段create_user,這樣才能按部門或用戶控制表數(shù)據(jù))
如果otherWhere不為空,則繼續(xù)追加這個(gè)查詢條件
二、列級(jí)權(quán)限
1、應(yīng)用場(chǎng)景:價(jià)格字段、身份證號(hào)、密碼等敏感字段
2、實(shí)現(xiàn)方式:頁(yè)面循環(huán)列控制顯示,比如jqgrid、datatables等,都是循環(huán)cols,在循環(huán)時(shí)通過(guò)標(biāo)簽控制,標(biāo)簽判斷如果為true,則顯示該標(biāo)簽包含內(nèi)容,反之,不顯示
3、功能實(shí)現(xiàn):
同樣,先建一個(gè)列級(jí)權(quán)限范圍控制表userId(用戶id)、table_id(頁(yè)面tableId),type(控制類型:1-本部門 2-包含下級(jí)部門 3-本用戶)、isUsed(是否使用),hideCols(配置隱藏的列,和dataTables的columns字段相同,可用逗號(hào)分割)
在用戶數(shù)據(jù)權(quán)限的“列級(jí)數(shù)據(jù)”選項(xiàng)卡,先選定按部門、含下級(jí)部門、用戶,錄入多個(gè)隱藏的列用逗號(hào)分隔,注意id不能隱藏,保存
頁(yè)面表格列控制,本人這里使用的是shiro權(quán)限框架,前端用的thymeleaf+datatablse, 所以用直接用shiro自定義標(biāo)簽(其它可用自定義標(biāo)簽實(shí)現(xiàn)),標(biāo)簽功能傳參table_id,col_id,根據(jù)登陸用戶id、table_id、col_id,isUsed=1查詢 count>0返回false,col不顯示
補(bǔ)充:上述建的行級(jí)控制和列級(jí)控制兩張配置表可放到redis緩存中,提高查詢性能
通過(guò)這種方式,可先只做功能權(quán)限,不考慮數(shù)據(jù)權(quán)限,如果有客戶需求,可通過(guò)需求進(jìn)行配置開發(fā),這樣改動(dòng)的代碼量相對(duì)較小,而且通過(guò)攔截器實(shí)現(xiàn)的,不影響整個(gè)后臺(tái)的邏輯代碼,而且便于后期的統(tǒng)一維護(hù)和更改
這里只是目前本人的實(shí)現(xiàn)思路,如大家有更好的實(shí)現(xiàn)方式,可分享,跟大家一起進(jìn)步~~~
轉(zhuǎn)載于:https://www.cnblogs.com/bao666/p/9035076.html
總結(jié)
以上是生活随笔為你收集整理的数据权限设计(原创)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。