如何實現後臺管理系統的權限路由和權限菜單

2020-12-22 酷扯兒

本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫

前言

本文是繼 前端如何一鍵生成多維度數據可視化分析報表 實戰的最後一篇文章, 主要介紹如何實現後臺管理系統的權限路由和權限菜單. 希望通過這3篇文章的復盤和實戰, 可以讓大家開發企業應用的時候更加遊刃有餘.

本文主要涉及的技術點如下:

如何使用遞歸算法動態渲染不定層級的菜單如何基於權限來控制菜單展現基於nodejs的權限服務設計正文

動態菜單和權限路由是後臺管理系統設計中必不可少的環節, 作為複雜後臺管理系統來說, 導航菜單往往不是簡單的一級菜單, 往往都會有3級,4級菜單, 如下:

所以我們首要解決的問題就是面對未知層級菜單時的前端解決方案. 其次就是面對不同角色,需要展示不同的權限菜單, 我們如何解決這兩個問題, 是實現權限菜單的第一步,接下來筆者就會帶大家一起實現.

使用遞歸算法動態渲染不定層級的菜單

首先我們來解決第一個問題, 實現渲染不定層級的菜單. 我們目前常用的菜單schema如下:

const menuData = [{ key: '/manage', path: '/manage', text: 'dooring工作檯', }, { key: '/manage/anazly', path: '/manage/anazly', text: '數據大盤', }, { key: '/manage/h5', text: 'H5服務中心', sub: [ { key: '/manage/h5/config', path: '/manage/h5/config', text: 'H5頁面管理', }, { key: '/manage/h5/tpl', path: '/manage/h5/tpl', text: '模板庫', } ] }, { key: '/manage/order', path: '/manage/order', text: '訂單管理', }]

複製代碼

我們可以通過實現一個js算法來遍歷這個數據生成動態菜單, 比如for, 遞歸等, 筆者這裡採用遞歸來實現, 關於菜單組件的選擇, 我們可以使用antd的Menu, 也可以使用element UI, iView等, 原理基本一致, 這裡筆者直接寫出我的javascript遞歸版本:

const { SubMenu } = Menu;const createMenu = (menu = []) => {return menu.map(item => { if(item.sub) { return <SubMenu key={item.key} title={item.text}> { createMenu(item.sub) } </SubMenu> }else { return <Menu.Item key={item.key}> <Link to={item.path}>{ item.text }</Link> </Menu.Item> } }) }

複製代碼

通過以上方式我們就可以渲染出任何層級的菜單了, 在H5-Dooring後臺中效果如下:

如果沒有權限需求, 大家可以直接用以上方案實現任何動態層級菜單. 接下來我們來實現具有權限功能的動態菜單.

基於權限來控制菜單展現

在上面的實現中我們已經實現了動態層級菜單, 對於有權限管理功能的系統, 我們需要對不同用戶展現不同菜單, 比如超級管理員, 普通管理員, 或者更細的劃分, 我們需要在遍歷菜單的時候去動態根據權限過濾, 接下來我們看一個例子: 超級管理員登錄的菜單界面:

普通管理員登錄的菜單界面:

首先要想實現權限菜單, 我們需要修改菜單schema結構, 添加權限欄位,如下:

const menuData = [{ key: '/manage', path: '/manage', text: 'dooring工作檯' }, { key: '/manage/anazly', path: '/manage/anazly', text: '數據大盤', }, { key: '/manage/auth', path: '/manage/auth', text: '會員管理', auth: true, }, { key: '/manage/h5', text: 'H5服務中心', sub: [ { key: '/manage/h5/config', path: '/manage/h5/config', text: 'H5頁面管理', }, { key: '/manage/h5/tpl', path: '/manage/h5/tpl', text: '模板庫', auth: true, } ] }]

複製代碼

上圖可知我們添加了auth欄位作為權限標示, 這裡我們主要用true和false表示, 因為這裡只有2中角色, 如果有多種權限, 我們可以用特殊字符串或者數字表示, 這塊只需要和後端約定好即可. 具體實現如下:

const createMenu = (menu = []) => {return menu.map(item => { if(item.sub) { return <SubMenu key={item.key} title={item.text}> { createMenu(item.sub) } </SubMenu> }else { if((rp === 'super' && item.auth) || !item.auth) { return <Menu.Item key={item.key} icon={iconMap[item.icon]}> <Link to={item.path}>{ item.text }</Link> </Menu.Item> }else { return null } } }) }

複製代碼

以上就實現了動態不限層級的權限菜單. 大家可以直接食用哈~

基於nodejs的權限服務設計

以上實現主要是前端層面的設計方案, 我們都知道前端的安全措施永遠是不可靠的, 所以我們為了保證系統的安全性, 一般我們會把菜單數據存到後端, 通過接口動態請求權限菜單. 這塊我們可以提前和後端做好約定, 讓後端根據不同用戶返回不同的權限菜單schema即可. 由於方案比較簡單, 這裡筆者就不一一介紹了. 感興趣可以在參考H5-Dooring的實現.

所以, 今天你又博學了嗎?

相關焦點

  • 後臺系統:基於RBAC模型的權限設計
    對於業務複雜或數據龐大的系統,為了方便管理,一定要做權限設計。權限設計是後臺系統要考慮的一個授權策略問題。
  • 面試題:如何設計一個權限系統?
    用戶是發起操作的主體,按類型分可分為2B和2C用戶,可以是後臺管理系統的用戶,可以是OA系統的內部員工,也可以是面向C端的用戶,比如阿里雲的用戶。角色起到了橋梁的作用,連接了用戶和權限的關係,每個角色可以關聯多個權限,同時一個用戶關聯多個角色,那麼這個用戶就有了多個角色的多個權限。有人會問了為什麼用戶不直接關聯權限呢?
  • 技術乾貨|基於角色的菜單/按鈕級的統一權限管理
    各自系統權限體系獨立管理維護,各自為政,為日常的管理員授權、權限變更、清權帶來了不小的困擾,很多情況下,申請人不知道自己需要的權限,而管理員也不清楚申請人申請的權限是否達到權限最小化的要求,加之系統數量又多,結合到一起導致了企業裡權限管理和使用混亂,很難梳理清楚、說得明白。
  • 區域空間資源綜合管理系統的權限控制設計與實現
    由於區域空間資源綜合管理系統從結構上包括了C/S結構和B/S結構的多個子系統,並且必須針對每個系統控制好每個用戶的查看範圍、查看資源、維護權限等,因此針對系統多、角色多、部門多等特點,設計實現了區域空間資源綜合管理系統的權限控制模塊,便於維護、使用,為系統提供安全保障。
  • 0074 實現圖書管理系統的登錄、員工和菜單功能
    這節課開始進行代碼編寫,具體的編程思考細節可以參照之前編寫新聞發布系統的思路。代碼如下:後臺共通Top頁面,top.php代碼如下:編寫員工管理頁面員工管理一覽頁面顯示文件,employee_list.php代碼如下:員工管理一覽頁面處理文件,employee_list_do.php代碼如下:
  • Spring boot + Spring Security實現權限管理
    基於Spring boot + Spring Security實現第一版傳統架構本文是實訓邦的權限管理SpringSecurity+JWT的一個講義,分享給粉絲學習。任務案例分析權限管理是一個幾乎所有後臺系統的都會涉及的一個重要組成部分,可以說是後臺項目的基本功,主要目的是對整個後臺管理系統進行權限的控制,而針對的對象是員工,避免因權限控制缺失或操作不當引發的風險問題,如操作錯誤,數據洩露等問題。
  • 實例分析:後臺權限設計
    例:整個系統中有三十個頁面,A員工權限只能查看其中的十個頁面。2. 操作權限操作權限是指系統中的功能按鈕有具體的操作權限。例:A員工在查看到十個頁面裡,其中一個頁面是商戶查詢頁面,但是A不是運營人員,所以只能查詢商戶信息,而不能對商戶進行新增、修改、刪除等操作權限3.
  • 2B產品的用戶權限管理問題與RBAC模型
    ToB產品的用戶角色問題》中,我們討論了 2B產品的用戶角色設計 問題,著重探討了在整個系統中,用戶和角色的關係,並基於業務過程對角色進行了場景的細分,並詳細的解釋了為什麼要在做產品原型設計之前分析業務角色,設計各個角色的關係。本文則討論如何基於用戶角色進行權限管理。
  • renren-security v2.0.0 發布,輕量級權限管理系統
    具有如下特點輕量級的權限系統,只涉及Spring、Shiro、Mybatis後端框架,降低學習使用成本友好的代碼結構及注釋,便於閱讀及二次開發支持HTML、JSP、Velocity、Freemarker等視圖,零技術門檻完善的代碼生成機制,可在線生成entity
  • 【實戰】用戶管理權限系統怎麼做更好?
    在傳統伺服器運維管理的模式已經不能滿足網際網路公司的業務需求的情況下,國內各個網際網路公司都開始逐漸使用自動化的運維平臺實施統一管理。
  • 基於業務中臺,如何實現帳號與權限統一管理?
    原來各個應用系統各自為政的身份認證與權限管理的方式難以達到要求,這就必須要有一個統一的、高安全性和高可靠性的身份認證及權限管理系統。>一方面降低了系統整體運行的維護成本,另一方面保證了整個校園系統能夠隨著平臺的升級而同步升級,方便使用和管理,也保證了整個系統的先進性與安全性。
  • Vue Element+Node.js開發企業通用管理後臺系統
    「的管理後臺,通過 Node 實現了電子書上傳和解析功能以及權限管理。課程對 Vue 和 Node 有較為深入的應用,不僅會教大家如何實現功能,更會講解技術背後的原理,幫助大家做到舉一反三。4-1 組件通信provide和inject4-2 過濾器filters4-3 ***watch4-4 class和style綁定的高級用法4-5 Vue.observable4-6 插槽v-slot第5章 Element-UI入門對Element-UI的內容進行講解,包括如何搭建Element-UI使用環境,如何使用插件快速集成
  • B端產品設計:用戶角色權限系統設置
    1.2 B端產品用戶的需求B端客戶一般客戶角色多元化,每個用戶對系統的需求和職能也是不一樣的,這就需要我們根據他們的使用需求去劃分,讓系統使用者不會被其他事項幹擾或者看到不該看到的東西。所以這就需要B端產品能夠根據每個用戶的需求去「自定義功能」,就是系統的設計要靈活,系統管理者可以靈活配置自己想要的權限以及管理自己的員工。
  • Linux的RWX權限管理實現詳解及chmod使用
    前文我們對Linux作業系統的權限管理進行了簡要的介紹。今天我們就詳細介紹一下關於RWX權限管理的更多細節。很多同學對RWX權限都有一些了解,但是要說出子醜來恐怕就不那麼容易了。Linux的RWX權限控制又稱為DAC(Discretionary Access Control,自主訪問控制)。DAC 機制就是指對象的擁有者可以任意修改或授予此對象相應的權限。
  • 通用權限管理設計【資料庫結構設計】
    二,初步分析用戶和角色說到權限管理,首先應該想到,當然要設計一個用戶表應用場景 有了用戶和角色以後,就需要設計應用場景,比如一個應用程式有幾大模塊(系統模塊、項目管理模塊、銷售模塊),類似這樣的模塊就是一種應用場景,常見的還有
  • 用戶權限管理,設置文件和文件夾權限,防止別人修改或刪除
    用戶權限管理,設置文件和文件夾權限大家好,我是「科技跑的快」,權限授予用戶或組對某個對象、對象屬性的訪問類型。例如,小王組可以被授予對名為「原稿」文件的「讀取」和「寫入」權限。要對某個文件進行操作,需要獲取相應的權限,沒有授予權限的用戶就無法訪問或只能查看不能更改文件內容等。下面將介紹如何設置文件的權限,具體操作方法如下:1 選擇「屬性」命令選中文件夾,單擊「組織」下拉按鈕,在彈出的下拉菜單中選擇「屬性」命令,如下圖所示。
  • 新人入門:To B 的權限體系設計
    文章從權限模型和概念出發,對權限系統的核心進行剖析,抽象出權限系統中的核心要素,並結合案例對權限系統進行介紹。一個最簡單表達了權限模型的實例小明和小李,分別用自己的帳號和密碼登錄了同一個平臺頁面。小明登陸上去後,可以看到小說和視頻頁面。小李登陸上去之後,只能看到小說頁面。
  • Linux的ACL權限實現原理及實現詳解
    一篇文章了解Linux作業系統的權限管理2. Linux安全模塊框架(LSM)原理與代碼實現解析3. Linux的RWX權限管理實現詳解及chmod使用如果閱讀本文時發現有不清楚的地方,歡迎大家留言。作者會儘量回答大家的問題。
  • zuihou-admin-cloud 升級 | 實現數據權限
    # 2019年11月26日00:11:56 升級日誌1,同步最新的sql腳本、nacos腳本到源碼相應文件中2,租戶運營後臺升級
  • 增強EOS帳戶安全性:EOS帳戶權限管理之自定義權限
    而在 EOS 帳號權限管理中,通過 EOS 帳號的自定義權限功能,可以大大增加 EOS 帳號的安全性。今天我們就來學習如何給EOS帳號設置自定義權限,以及自定義權限有何用? 01 自定義權限有什麼用?EOS 帳號默認有 owner 和 active 兩個權限,除了默認權限外,我們還可以給EOS帳號設置自定義權限,權限的名稱和功能都可以根據自己的需要進行自定義。EOS 帳號權限設計非常靈活。