成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Alain 菜單權(quán)限控制

seanlook / 827人閱讀

摘要:為用戶進(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> {
    // 獲取前臺(tái)菜單
    const menus = AppConfig.menus as Array;
    return this.httpClient.get("/menu/allAuthMenu")
        .pipe(map((allAuthMenus: Array) => {
            // 對(duì)菜單進(jìn)行處理
            menus.forEach((menu: Menu) => {
                menu.children.forEach((childMenu: Menu) => {
                    childMenu.hide = !WebAppMenuService.checkMenuAuthOrNot(childMenu, allAuthMenus);
                });
            });
            return menus;
        }));
}
總結(jié)
先完成,再完美。這里僅實(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

相關(guān)文章

  • 發(fā)布 ng-alain 1.0.0 正式版

    摘要:發(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í)...

    dreamtecher 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問,所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問 Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過程,其中包括 Docke...

    tracy 評(píng)論0 收藏0
  • Angular 容器部署

    摘要:很多人反應(yīng)很難訪問,所以轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的容器部署。在容器化過程中,我們并未配置任何等,只是保留服務(wù)所需的配置項(xiàng)而已,而這一部分我們可以放在反向代理層完成。 很多人反應(yīng)很難訪問 Github Page,所以 ng-alain.com 轉(zhuǎn)移到阿里云服務(wù)器上,因此做了一次完整的 Angular 容器部署。 以下我會(huì)闡述 ng-alain 整個(gè)過程,其中包括 Docke...

    alighters 評(píng)論0 收藏0
  • 從0到1搭建element后臺(tái)框架之權(quán)限

    摘要:項(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)證,也就是我們所...

    NervosNetwork 評(píng)論0 收藏0
  • vue權(quán)限管理系統(tǒng)

    摘要:權(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...

    bovenson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

seanlook

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<