摘要:為用戶進(jìn)行設(shè)置角色,登陸系統(tǒng)后,用戶可使用其擁有角色對(duì)應(yīng)的所有菜單。負(fù)責(zé)后臺(tái)用戶的菜單授權(quán)。這里僅實(shí)現(xiàn)了菜單的隱藏,需要再編寫權(quán)限控制邏輯,使我們的系統(tǒng)更安全,但那是我們以后要考慮的事情。
問題描述
動(dòng)態(tài)菜單管理,用戶對(duì)應(yīng)角色,角色對(duì)應(yīng)菜單。
為用戶進(jìn)行設(shè)置角色,登陸系統(tǒng)后,用戶可使用其擁有角色對(duì)應(yīng)的所有菜單。
功能實(shí)現(xiàn)很簡(jiǎn)單,這里就不進(jìn)行代碼的講解了,直接講一下我所實(shí)現(xiàn)的思路。
實(shí)現(xiàn) 原設(shè)計(jì)系統(tǒng)設(shè)置中,前臺(tái)菜單遵循如下格式:
menus: [ { text: "主導(dǎo)航", group: true, children: [ { text: "首頁", link: "/main", icon: "anticon anticon-compass" }, { text: "系統(tǒng)設(shè)置", link: "/setting", icon: "anticon anticon-setting" } ], } ]
所以最開始的思路也很簡(jiǎn)單,后臺(tái)的Menu實(shí)體中存儲(chǔ)菜單所有相關(guān)的信息。
后臺(tái)直接就查出當(dāng)前登錄用戶所有的菜單,前臺(tái)根據(jù)返回來的菜單數(shù)據(jù)構(gòu)建前臺(tái)菜單。
問題能實(shí)現(xiàn)肯定是能實(shí)現(xiàn),但我們進(jìn)行設(shè)計(jì)時(shí),考慮的不應(yīng)僅僅是實(shí)現(xiàn),考慮的更多的是我這么實(shí)現(xiàn),效率高不高?以后好不好改?能不能被以后維護(hù)的人員快速理解?
斟酌之后,斷然拋棄了這種實(shí)現(xiàn),因?yàn)椋荒馨阉械臄?shù)據(jù)都放在后臺(tái)。
就拿icon字段來說,如果我們采用了上述實(shí)現(xiàn):
那當(dāng)我們以后想修改前臺(tái)菜單圖標(biāo)的時(shí)候,需要去修改后臺(tái)的數(shù)據(jù)初始化。這顯然不合理,以后維護(hù)的人員肯定會(huì)存在一個(gè)疑問,這是誰設(shè)計(jì)的菜單?我改個(gè)前臺(tái)的圖標(biāo)為什么要?jiǎng)雍笈_(tái)?
新設(shè)計(jì)既然不能講數(shù)據(jù)都放在后臺(tái),那前后臺(tái)就各司其職。
前臺(tái):包含菜單名稱,菜單圖標(biāo),菜單路由等信息。負(fù)責(zé)前臺(tái)菜單的格式顯示。
后臺(tái):只保留,菜單名,菜單路由,父菜單三項(xiàng)信息。負(fù)責(zé)后臺(tái)用戶的菜單授權(quán)。
核心思想就是:前臺(tái)配置好所有的菜單,但默認(rèn)將菜單隱藏。
應(yīng)用啟動(dòng)時(shí),查詢后臺(tái)接口,獲取當(dāng)前用戶的所有授權(quán)菜單,授權(quán)一個(gè),前臺(tái)就顯示一個(gè)。
前臺(tái)菜單:寫菜單時(shí)將hide置為true,默認(rèn)隱藏。
menus: [ { text: "主導(dǎo)航", group: true, children: [ { text: "首頁", link: "/main", hide: true, icon: "anticon anticon-compass" }, { text: "系統(tǒng)設(shè)置", link: "/setting", hide: true, icon: "anticon anticon-setting" } ] } ]
然后就是具體的邏輯,先獲取前臺(tái)的菜單,即所有菜單。
獲取當(dāng)前用戶授權(quán)菜單列表,以路由表示該菜單唯一,如果路由被授權(quán),就把hide置為false。
/** * 獲取所有被授權(quán)的菜單 */ getAllAuthMenu(): Observable總結(jié)> { // 獲取前臺(tái)菜單 const menus = AppConfig.menus as Array
先完成,再完美。這里僅實(shí)現(xiàn)了菜單的隱藏,需要再編寫權(quán)限控制邏輯,使我們的系統(tǒng)更安全,但那是我們以后要考慮的事情?,F(xiàn)在先加個(gè)TODO。先把客戶想要的功能先實(shí)現(xiàn)了,至于你實(shí)現(xiàn)得如何,代碼如何,客戶統(tǒng)統(tǒng)不關(guān)心,我們?cè)谙葷M足客戶對(duì)開發(fā)速度需求的前提下,以后再抽出時(shí)間將程序的某些功能完美。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73480.html
摘要:發(fā)布時(shí)我就想說那得喝一杯,這個(gè)版本的等待其實(shí)在社區(qū)里反應(yīng)是有點(diǎn)忐忑,所以當(dāng)跟我說來今天要發(fā)布時(shí)我說那晚上得喝一杯。當(dāng)然,今天也算是個(gè)不錯(cuò)的日子,也發(fā)布了正式版。發(fā)布沒多久,帶來了一些很酷的操作。希望真正做到讓開發(fā)者更加專注于業(yè)務(wù)。 ng-zorro-antd 0.7.0 發(fā)布時(shí)我就想說那得喝一杯,這個(gè)版本的等待其實(shí)在社區(qū)里反應(yīng)是有點(diǎn)忐忑,所以當(dāng)VTHINK跟我說來今天要發(fā)布 0.7 時(shí)...
摘要:很多人反應(yīng)很難訪問,所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問 Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過程,其中包括 Docke...
摘要:很多人反應(yīng)很難訪問,所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問 Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過程,其中包括 Docke...
摘要:項(xiàng)目中按鈕權(quán)限注冊(cè)全局自定義指令來完成的。如果對(duì)自定義指令不熟的話可以查閱官方文檔。相關(guān)文章鏈接從到搭建后臺(tái)框架打包優(yōu)化從到搭建后臺(tái)框架優(yōu)化篇 前言 首先還是謝謝各位童鞋的大大的贊贊,你們的支持是我前進(jìn)的動(dòng)力!上周寫了一篇從0到1搭建element后臺(tái)框架,很多童鞋留言提到權(quán)限問題,這一周就給大家補(bǔ)上。GitHub 一、jwt授權(quán)認(rèn)證 現(xiàn)在大多數(shù)項(xiàng)目都是采用jwt授權(quán)認(rèn)證,也就是我們所...
摘要:權(quán)限系統(tǒng)后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來控制用戶能訪問哪些頁面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁面都長(zhǎng)這樣。表為角色權(quán)限關(guān)聯(lián)表,一個(gè)角色擁有哪些權(quán)限是通過這張表查出來的。這樣就是一個(gè)賬號(hào)角色權(quán)限的關(guān)系。 vue權(quán)限系統(tǒng) 后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來控制用戶能訪問哪些頁面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁面都長(zhǎng)這樣。 showImg(https://segmentfault...
閱讀 667·2019-08-30 15:44
閱讀 1387·2019-08-30 11:02
閱讀 2995·2019-08-29 18:42
閱讀 3517·2019-08-29 16:16
閱讀 1725·2019-08-26 13:55
閱讀 1778·2019-08-26 13:45
閱讀 2392·2019-08-26 11:43
閱讀 3257·2019-08-26 10:32