權(quán)限細節(jié)整理

一:樹形結(jié)構(gòu)---權(quán)限樹顯示節(jié)點(設置權(quán)限頁):

返回的樹形結(jié)構(gòu),可以遞歸循環(huán)處理成自己想要的格式。

同時樹形結(jié)構(gòu)的相互關(guān)聯(lián),導致父節(jié)點的key一旦返回,子節(jié)點便會全部選中。所以這里用一個數(shù)組halfSelectKeys去裝所有的父節(jié)點,返回選中的數(shù)據(jù)減去所有父節(jié)點。這樣渲染時就是通過子節(jié)點是否全部選中,去關(guān)聯(lián)父節(jié)點是否選上。(子節(jié)點如果全部選中,就算沒有數(shù)據(jù)里父節(jié)點的值,父節(jié)點也會勾選上)。

二:點確定提交時,將halfSelectKeys和選中節(jié)點數(shù)的據(jù)合集,并去重,作為參數(shù)傳遞。有兩種情況:

1無變更點確定。則是【返回數(shù)據(jù)父節(jié)點值的數(shù)組】和【返回數(shù)據(jù)選中子節(jié)點值的數(shù)組】合集傳遞即可。

2有變更點確定。在節(jié)點onCheck事件中可以拿到所有【半選中節(jié)點數(shù)組】和【已選中節(jié)點數(shù)組】,也可以在提交的時候取合集。

三:用戶登錄時顯示自己的菜單路由。

1,在登錄時,會返回用戶權(quán)限id數(shù)組,去匹配接口數(shù)據(jù)(全部路由的樹形結(jié)構(gòu),有id和path路由等參數(shù)),將有權(quán)限的路由path數(shù)組存儲在sessionStorage中。并刷新頁面(如不刷新,存儲的路由數(shù)據(jù)不會更新)

更新:將有權(quán)限的路由path數(shù)組存儲在狀態(tài)管理store中,sessionStorage可被用戶更改。


2,在app.jsx中的modifyRoutes方法中拿到本地全部路由,并匹配store中的路徑,重新 return 新的有權(quán)限的路由。注意路由的模糊匹配寫精確路由的后面,會先匹配精確路由,后匹配模糊路由。




在頁面刷新時將數(shù)據(jù)保存在sessionStorage中,加載頁面前將session數(shù)據(jù)存在store中,并銷毀session數(shù)據(jù)

3,在菜單級別也要過濾一下,匹配store中的路徑,展示有權(quán)限的菜單。



四,按鈕權(quán)限封裝。

1,約定每個模塊下的按鈕通用名字:查詢(query),新增(add),詳情(detail),編輯(edit),刪除(delete),導入(import),導出(export)。其他特殊按鈕自定義名稱。

2,路由改動,之前的重定向路由邏輯是:找第一個children下的最深層children為空的path。現(xiàn)加了按鈕權(quán)限,最深層的children為按鈕級別,所以需要修改重定向路由的方法:加上判斷,如children不為空,且children里的path包括'/',則繼續(xù)遞歸,否則判定為重定向路由。(因為約定按鈕權(quán)限的名稱不包括'/')

3,按鈕權(quán)限組件封裝邏輯。

(1)pathName為當前頁面路由(如:/production_scheduling/basic_info/enterprise),pathName與store中存儲的路由相比較,遞歸直到找到完全一致的路由,得到其children(如:['query','add', 'edit', 'delete']),并賦值為authBtnList。

(2)外層調(diào)用時,按鈕權(quán)限組件需包裹按鈕,并將此按鈕的type傳入。(如新增則傳入add)

(3)判斷authBtnList中是否含有type,如有則加載其組件。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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