



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 授權(quán)(階段實(shí)戰(zhàn))學(xué)習(xí)目標(biāo)能夠描述或描繪RBAC模型的7張表及其關(guān)系理解管理員角色設(shè)置的需求與實(shí)現(xiàn)思路,完成管理員角色設(shè)置功能理解角色權(quán)限設(shè)置的需求與實(shí)現(xiàn)思路,完成角色權(quán)限設(shè)置的功能掌握spring security授權(quán)控制的兩種方式,實(shí)現(xiàn)用戶權(quán)限控制的功能理解用戶菜單展示的需求與實(shí)現(xiàn)思路,完成用戶菜單展示的功能1. RBAC模型1.1 什么是RBAC權(quán)限系統(tǒng)提的最多的就是 RBAC(Role-Based Access Control 基于角色的訪問控制)。 所謂角色,其實(shí)就是權(quán)限的集合,某個(gè)角色就是某幾個(gè)權(quán)限的結(jié)合。其目的是為 了簡化授權(quán)和鑒權(quán)的過程。首選說一下為什么要進(jìn)行訪問控制。為
2、了屏蔽無關(guān)人員操作系統(tǒng)的某個(gè)功能,防止誤操作產(chǎn)生的垃圾數(shù)據(jù)或數(shù)據(jù)丟失。小公司和比較簡單的權(quán)限系統(tǒng)使用的基于用戶的訪問控制如下:這種訪問控制只適用于操作人員比較少的系統(tǒng),如果操作人員較多,對(duì)每個(gè)操作人員都進(jìn)行授權(quán)操作,無疑是非常繁瑣的。所以我們就需要基于角色的訪問控制1.2 表結(jié)構(gòu)分析企業(yè)開發(fā)中 RBAC模型設(shè)計(jì)為7張表,其中4張為基礎(chǔ)表,3張為中間表。1.2.1 用戶與用戶和 為多對(duì)多關(guān)系,通過用戶 中間表關(guān)聯(lián)tb_admin 管理員表:tb_role 表:tb_admin_role 管理員 中間表:字段名稱字段含義字段類型字段長度備注ididINT主鍵name名稱VARCHAR字段名稱字段含
3、義字段類型字段長度備注ididINT主鍵login_name登錄名稱VARCHARpasswordstatus狀態(tài)1.2.2 與權(quán)限和權(quán)限為多對(duì)多關(guān)系,通過 權(quán)限中間表關(guān)聯(lián)tb_role 表:tb_resource 權(quán)限表( 表):tb_role_resource 中間表:1.2.3 權(quán)限與菜單權(quán)限和菜單為多對(duì)多關(guān)系,通過權(quán)限菜單中間表關(guān)聯(lián)tb_resource 權(quán)限表( 表):字段名稱字段含義字段類型字段長度備注role_ididINT主鍵resource_ididINT主鍵字段名稱字段含義字段類型字段長度備注ididINT主鍵res_keykeyVARCHAR系統(tǒng)定義好的權(quán)限標(biāo)識(shí)res_n
4、ame名稱VARCHARparent_ididINT權(quán)限表的層次結(jié)構(gòu)為2層字段名稱字段含義字段類型字段長度備注ididINT主鍵name名稱VARCHAR字段名稱字段含義字段類型字段長度備注admin_id管理員idINT主鍵role_ididINT主鍵tb_menu 菜單表:tb_resource_menu 資源菜單中間表:2. 管理員角色設(shè)置2.1 需求分析管理員和角色為多對(duì)多關(guān)系,在保存管理員時(shí)實(shí)現(xiàn)對(duì)管理員角色中間表的添加。詳見靜態(tài)原型。字段名稱字段含義字段類型字段長度備注resource_id資源idINT主鍵menu_id菜單idVARCHAR主鍵字段名稱字段含義字段類型字段長度備注
5、ididVARCHAR主鍵name菜單名稱VARCHAR.parent_id上級(jí)菜單idVARCHAR菜單表的層次結(jié)構(gòu)為3層字段名稱字段含義字段類型字段長度備注id資源idINT主鍵res_key資源keyVARCHAR系統(tǒng)定義好的權(quán)限標(biāo)識(shí)res_name資源名稱VARCHARparent_id上級(jí)資源idINT權(quán)限表的層次結(jié)構(gòu)為2層在修改某個(gè)管理員時(shí),需要將該管理員的角色id列表讀取出來。2.2 思路分析2.2.1 提交角色設(shè)置(1) 創(chuàng)建管理員角色中間表的實(shí)體類和數(shù)據(jù)訪問接口(2) 創(chuàng)建組合實(shí)體類,包含管理員實(shí)體類和角色I(xiàn)D集合兩個(gè)屬性(3) 修改管理員實(shí)體類,為id添加以下注解可以標(biāo)識(shí)該
6、主鍵為自增 GeneratedValue(strategy=GenerationType.IDENTITY)添加此注解后,可以獲取新增的id值。(4)修改管理員add方法,取出管理員實(shí)體保存,取出 ID集合,循環(huán)添加到管理員中間表。(5) 注意在保存管理員 時(shí)需要對(duì) 進(jìn)行bcrypt加密。(6) 前端可以根據(jù) 架構(gòu)師生成的代碼修改即可?!八鶎?”使用elementui的select選擇器 ,為 elselect 設(shè)置 multiple 屬性即可啟用多選 ,詳見 文檔。2.2.2 設(shè)置(1) 修改findById方法的返回值為組合實(shí)體類,修改其中的邏輯,組合實(shí)體類的 id集合需要 管理員 中間表
7、。(2) 修改update方法,刪除原來的相關(guān)的中間表數(shù)據(jù),再循環(huán)添加中間表數(shù)據(jù)。(3) 后需要把 屬性設(shè)置為null, 如果用戶沒有在界面輸入 則保持 不變,如果填寫了 需要進(jìn)行bcrypt加密。3. 權(quán)限設(shè)置3.1 需求分析顯示所有的權(quán)限列表,并自動(dòng) 已經(jīng)保存的權(quán)限。用戶 權(quán)限后,點(diǎn)擊提交,將勾選的權(quán)限id提交給后端保存3.2 思路分析3.2.1 提交權(quán)限設(shè)置(1) 創(chuàng)建 權(quán)限中間表的實(shí)體類和數(shù)據(jù) 接口(2) 前后端約定要提交的數(shù)據(jù)格式,包括“ id”和“權(quán)限id列表”。根據(jù)約定的數(shù)據(jù)格式創(chuàng)建組合實(shí)體類。(3)后端添加方法,接收組合實(shí)體類參數(shù),提取“ id”和“權(quán)限id列表”,循環(huán) 權(quán)限i
8、d 到 權(quán)限中間表中。3.2.2 權(quán)限設(shè)置(1) 后端 權(quán)限表( 表),以樹狀結(jié)構(gòu)返回?cái)?shù)據(jù)。前端使用兩層v-for循環(huán)輸出列表。(2) 后端添加方法,根據(jù) 權(quán)限id列表,前端獲取權(quán)限id列表后實(shí)現(xiàn)復(fù)選框的勾選。4. 用戶權(quán)限4.1 需求分析當(dāng)用戶執(zhí)行一個(gè)不存在的權(quán)限的url,需要 請(qǐng)求。4.2 spring security4.2.1 基于URL在UserDetailsServiceImpl的loadUserByUsername方法,實(shí)現(xiàn)對(duì)當(dāng)前用戶的/構(gòu)建權(quán)限列表List<GrantedAuthority> grantedAuths = new ArrayList<Grant
9、edAuthority>(); grantedAuths.add(new SimpleGrantedAuthority("goods_add"); grantedAuths.add(new SimpleGrantedAuthority("goods_edit");.修改applicationContext_security.xmlhasAnyAuthority():擁有任意權(quán)限都可以hasAuthority('brand'): 擁有brand的權(quán)限可以hasAnyAuthority('goods_add','
10、goods_edit')" :擁有g(shù)oods_add和goods_edit其中一個(gè)權(quán)限就可以4.2.2 基于方法的對(duì)當(dāng)前用戶 ,同上 ,對(duì)方法的 如下:(1)修改applicationContext_security.xml ,增加配置 ,啟用注解 <globalmethodsecurity prepostannotations="enabled" />(2)在進(jìn)行權(quán)限 的方法上添加注解 PreAuthorize("hasAuthority('brand')")brand為 key4.3 思路分析(1)編寫S
11、QL語句,通過登錄名 KEY列表這里我們用到了4層嵌套循環(huán)(2)數(shù)據(jù) 接口新增方法,根據(jù)登錄名 KEY列表SELECT res_key FROM tb_resource WHERE id IN (SELECT resource_id FROM tb_role_resource WHERE role_id IN ( SELECT role_id FROM tb_admin_role WHERE admin_id IN (SELECT id FROM tb_admin WHERE login_name='admin')<intercepturl pattern="/
12、*/find*.do" access="hasAnyAuthority()" /><intercepturl pattern="/brand/*.do" access="hasAuthority('brand')" /><intercepturl pattern="/spu/save.do" access="hasAnyAuthority('goods_add','goods_edit')" />(3) 服務(wù)
13、層實(shí)現(xiàn)根據(jù)登錄名 KEY列表(4) UserDetailsServiceImpl的loadUserByUsername方法,調(diào)用根據(jù)登錄名KEY列表的方法,將 key列表添加到當(dāng)前用戶。/構(gòu)建權(quán)限列表List<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>(); List<String> resKeyList = resourceService.findResKeyByLoginName(s); for(String resKey :resKeyList )grantedAut
14、hs.add(new SimpleGrantedAuthority(resKey);(5)修改applicationContext_security.xml,添加對(duì)url的 ,或在方法上添加注解實(shí)現(xiàn)對(duì)方法的 。5. 用戶菜單篩選5.1 需求分析用戶登錄后進(jìn)入主界面,顯示的菜單為用戶所擁有的權(quán)限關(guān)聯(lián)的菜單。不具 限的菜單不顯示。5.2 思路分析(1)編寫SQL語句,根據(jù)當(dāng)前登錄名獲取菜單列表的方法SELECT * FROM tb_ WHERE id IN(SELECT _id FROM tb_resource_ WHERE resource_id IN ( SELECT resource_id
15、FROM tb_role_resource WHERE role_id IN (SELECT role_id FROM tb_admin_role WHERE admin_id IN ( SELECT id FROM tb_admin WHERE login_name='admin')注意通過上述語句,獲取的菜單列表只包含三級(jí)菜單,而我們需要返回包括一級(jí)菜單、 菜單和三級(jí)菜單的菜單列表。只要三級(jí)菜單存在,就要有它的 菜單;只要有一個(gè) 菜單就要有它的一級(jí)菜單。菜單列表:SELECT * FROM tb_ WHERE id IN(SELECT parent_id FROM tb_
16、WHERE id IN(SELECT _id FROM tb_resource_ WHERE resource_id IN ( SELECT resource_id FROM tb_role_resource WHERE role_id IN (SELECT role_id FROM tb_admin_role WHERE admin_id IN ( SELECT id FROM tb_admin WHERE login_name='admin')一級(jí)菜單列表:SELECT * FROM tb_ WHERE id IN (SELECT parent_id FROM tb_ WH
17、ERE id IN( SELECT parent_id FROM tb_ WHERE id IN(SELECT _id FROM tb_resource_ WHERE resource_id IN ( SELECT resource_id FROM tb_role_resource WHERE role_id IN (SELECT role_id FROM tb_admin_role WHERE admin_id IN ( SELECT id FROM tb_admin WHERE login_name='admin')最后我們通過UNION運(yùn)算符將三個(gè)語句連接成一條語句SEL
18、ECT * FROM tb_ WHERE id IN(SELECT _id FROM tb_resource_ WHERE resource_id IN ( SELECT resource_id FROM tb_role_resource WHERE role_id IN (SELECT role_id FROM tb_admin_role WHERE admin_id IN ( SELECT id FROM tb_admin WHERE login_name='admin') UNIONSELECT * FROM tb_ WHERE id IN(SELECT parent_id FROM tb_ WHERE id IN(SEL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 食品生產(chǎn)企業(yè)物料平衡管理要點(diǎn)
- 環(huán)境科學(xué)與生態(tài)學(xué)知識(shí)應(yīng)用題集
- 地理信息系統(tǒng)應(yīng)用與實(shí)踐知識(shí)重點(diǎn)
- 文化因素在大學(xué)英語課程體系中的滲透與創(chuàng)新
- 綠色供應(yīng)鏈發(fā)展趨勢(shì)與市場需求分析
- 工程預(yù)算書合作編制協(xié)議
- 數(shù)字創(chuàng)新與中國式產(chǎn)業(yè)鏈現(xiàn)代化路徑探討
- 真實(shí)情境問題創(chuàng)設(shè)對(duì)創(chuàng)新能力培養(yǎng)的實(shí)踐探索
- 各行業(yè)客戶群體特征表格
- 新時(shí)代勞動(dòng)教育的內(nèi)涵與目標(biāo)體系
- 2025年北京市第一次普通高中學(xué)業(yè)水平合格性考試歷史試題(含答案)
- 《醫(yī)療機(jī)構(gòu)重大事故隱患判定清單(試行)》知識(shí)培訓(xùn)
- 甘肅開放大學(xué)2024年《信息技術(shù)與信息管理》形考作業(yè)1-4答案
- 浙江省杭州市2024年中考英語真題(含答案)
- 2022年《數(shù)據(jù)結(jié)構(gòu)(本)》形考任務(wù)實(shí)踐活動(dòng)3
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題庫及答案
- 醫(yī)學(xué)檢驗(yàn)項(xiàng)目管理制度
- 《陸上風(fēng)電場工程設(shè)計(jì)概算編制規(guī)定及費(fèi)用標(biāo)準(zhǔn)》(NB-T 31011-2019)
- 年產(chǎn)4億片阿奇霉素片的精烘包及車間設(shè)計(jì)
- 財(cái)務(wù)管理制度學(xué)習(xí)記錄
- 電機(jī)常用公差配合
評(píng)論
0/150
提交評(píng)論