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

2020-12-23 酷扯兒

本文轉載自【微信公眾號:趣談前端,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的實現.

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

相關焦點

  • 搭建後臺系統權限系統的經驗總結
    作為後臺產品經理,相信大家都有接觸過權限系統,權限系統是後臺系統中不可缺少的部分,可以保證系統分工明確,不同部門、不同崗位的人員可以合理的使用系統,減少因權限導致的指責劃分不明確等問題。針對對公司權限系統存在的問題,進行重新規劃,新的權限系統功能模塊分為組織架構管理、頁面菜單設置、角色權限管理、帳號管理四個模塊。針對這四個主要模塊,展開詳細的說明。一、組織架構組織架構管理是對整個集團公司的員工所屬組織進行維護、更新的管理。
  • 後臺權限設計法:「三位一體」
    如何產出一個相對合理的後臺權限設計?本文筆者提出了一個後臺權限設計法:三位一體法——也就是「用戶+角色+組織結構=用戶權限」。為什麼要設計後臺權限廣義的後臺包括業務系統(ERP、CRM、財務與客服系統等)、平臺型產品、To B商戶端以及各類App的管理後臺等。其中不少初創App的管理後臺,一個超管帳號打天下,等規模提高到需要拆分後臺用戶權限的時候,再對後臺的改造,這幾乎算是刮骨療毒了,需要付出的代價很大。可以說越早進行後臺權限設計,後續成本也就越低。
  • 後臺權限管理設計思路:三種模型分析
    編輯導語:任何系統/產品搭建時,最先考慮的都應該是權限管理模塊,而且權限管理模塊的清晰、穩定是平臺產品健康發展的基石,權限管理核心考慮的問題是用戶與權限的關係。本文作者對三種不同權限管理的版本展開了梳理分析,與大家分享。
  • Spring boot + Spring Security實現權限管理
    基於Spring boot + Spring Security實現第一版傳統架構本文是實訓邦的權限管理SpringSecurity+JWT的一個講義,分享給粉絲學習。任務案例分析權限管理是一個幾乎所有後臺系統的都會涉及的一個重要組成部分,可以說是後臺項目的基本功,主要目的是對整個後臺管理系統進行權限的控制,而針對的對象是員工,避免因權限控制缺失或操作不當引發的風險問題,如操作錯誤,數據洩露等問題。
  • 如何對權限管理平臺進行產品設計?
    本篇以筆者做過的一個權限管理平臺為例,講解下權限管理的設計思路。項目背景本次是為培訓機構搭建一套信息化系統,包括一個權限管理平臺、以及5個業務系統。這裡就不對業務系統做一一的描述了。其中權限管理平臺由總部運營人員進行管理與維護。此平臺的主要目標是:各個業務系統的所有功能和數據進行統一權限配置。
  • 2B產品的用戶權限管理問題與RBAC模型
    ToB產品的用戶角色問題》中,我們討論了 2B產品的用戶角色設計 問題,著重探討了在整個系統中,用戶和角色的關係,並基於業務過程對角色進行了場景的細分,並詳細的解釋了為什麼要在做產品原型設計之前分析業務角色,設計各個角色的關係。本文則討論如何基於用戶角色進行權限管理。
  • 權限設計=功能權限+數據權限
    甚至考慮到業務經理之間的競爭,系統可以控制更細粒度級別的數據權限,即普通業務經理的角色只能看到自己維護的客戶單位,而不能查看其他人員的客戶單位。軟體系統的權限管理其實是與線下實際管理策略相對應的。有些企業本身制定和實施了嚴格的規章制度,那麼軟體系統的權限管理就可以幫助企業更好的貫徹制度的實行,提高整體的運行效率和數據的安全。
  • ToB產品設計:用戶權限系統解析
    現有的權限系統通常基於RBAC(Role-Based Access Control)的思想設計,角色和權限綁定、角色和用戶之間的鬆耦合、多對多的關係來實現授權和授權的快速變更,從而控制用戶對系統的功能使用和數據訪問權限,以達到企業或機構安全管控的目的。和用戶權限系統密切相關的還有兩個模塊:帳號體系和組織架構。
  • 手把手教你做系統權限設計,看完不要說還不會
    用戶 是發起操作的主體,按類型分可分為2B和2C用戶,可以是後臺管理系統的用戶,可以是OA系統的內部員工,也可以是面向C端的用戶,比如阿里雲的用戶。角色 起到了橋梁的作用,連接了用戶和權限的關係,每個角色可以關聯多個權限,同時一個用戶關聯多個角色,那麼這個用戶就有了多個角色的多個權限。有人會問了為什麼用戶不直接關聯權限呢?
  • 技術乾貨|企業信息系統統一權限管理2:基於角色的權限實踐
    上一篇文章技術乾貨 | 企業信息系統統一權限管理,我們對企業信息系統統一權限及基於角色的權限模型(RBAC)進行了探討,而這一篇文章,我們將繼續沿著這條思路,給大家進一步的分享企業如何基於角色的權限訪問控制模型(RBAC)來做統一權限管理。
  • 產品經理之用戶角色權限的管理設計模式
    通常在做系統的時候除開基礎業務外我們要搭建一套與行政功能相關聯的基礎三要素:用戶、角色、權限。(本文就不畫圖了,雖然圖片利於理解但是我手頭上的工具有限就算了)二、三個模塊搭建用戶系統通常我們在做產品設計的時候做用戶系統的時候都會分為:用戶、角色管理(一般角色和權限都做在一個模塊,角色包含權限)部門管理。
  • Spring Boot+Maven+JPA+Shiro+Easyui實現通用用戶權限管理系統
    項目描述日常工作中,權限管理是管理系統必不可少的功能。網絡上有各種各樣的權限管理系統,不過用別人的總不如自己寫一套來得踏實。之前本菜鳥分享的例子裡有各種技術點的分項實例,這次做一個綜合,形成自己的簡單通用的權限管理系統。
  • 復盤大集中模式下的角色權限設計
    因此,大型系統的RBAC管理過程更為複雜,此時簡單的RBAC已不能滿足系統的訪問控制分級管理的要求。尤其在信息系統中存儲和管理大量企業單位的敏感數據,一旦這些數據被洩露或竊取,會給帶來難以彌補的損失。另外在企業運營中經常需要對組織架構和人員工作進行調整,相應地需要修改系統中訪問控制主體和權限的關係。
  • 一文詳解To B權限設計
    進圖書館小場景和RBAC模型有什麼聯繫?首先我們先看下百度百科的介紹「RBAC(Role-Based Access Control):基於角色的訪問控制(RBAC)是實施面向企業安全策略的一種有效的訪問控制方式。」「其基本思想是,對系統操作的各種權限不是直接授予具體的用戶,而是在用戶集合與權限集合之間建立一個角色集合。
  • 實戰乾貨:EHR系統的權限設計
    編輯導讀:EHR系統即人力資源管理系統,通過做權限系統可以方便維護,減少人力部門的工作量。本文通過實際案例,分析項目的不同階段要怎麼設置權限,希望對你有幫助。原來已經寫過一篇關於權限系統的文章,涉及到各種類型的權限管理(B端產品權限設計,別踩了坑才想起我)。
  • 實戰篇:B端權限管理
    其中統一用戶管理平臺由客戶IT部門管理,決定哪個用戶能夠登錄哪個系統。CRM系統由內部管理人員、商務、內勤、辦公室、財務等人員使用,用於客戶管理和內部管理,需要實現很多跨部門協同的功能,而且是以上各系統中使用人員和範圍最廣的一個系統。以下分析均以CRM系統為例:信息化基礎:該研究院IT基礎薄弱,目前只有GLP實驗室管理系統。
  • 查看和管理 iPhone 應用訪問位置數據的權限
    您可以隨時在設置中調整位置權限設置,當應用請求訪問位置時也會出現提示。在調整訪問位置數據權限時,除了「始終」和「從不」之外,所有應用還包含「使用 App 期間」選項。如果您想重置應用的位置權限,則還有一個「詢問下一次」選項。
  • 談一談B端的功能權限設計(上)
    如果你做過企業端或者後臺產品,你對權限設計應該不會陌生。權限設計是所有企業系統的基礎, 企業系統中所有的功能模塊都需要考慮到權限的控制。我們所說的「權限」,包括「功能權限」和「數據權限」,「功能權限」指用戶登錄系統後能看到哪些模塊,操作哪些按鈕比如常見的CRM系統,銷售人員和財務人員由於處理的業務不同,登錄系統後,看到的功能模塊也不盡相同;同樣都是財務人員,職位大小不同,擁有的操作功能也可能不同。
  • 大明:教你如何解決沒有權限訪問共享印表機?非常簡單實用
    大家好,我是大明,前幾天講了如何設置印表機共享,有一位粉絲問我在連接共享印表機時提示「沒有訪問權限」的問題,那麼今天大明就針對這個問題來講一下,為什麼連接印表機提示「沒有權限訪問」,以及該如何正確的解決。
  • 「Django」RBAC權限管理系統模塊-理解
    顧名思義,在系統中可以靈活的劃分角色組,可以根據功能特性來劃分:- 比如設置系統管理員角色,綁定系統所有菜單,該角色享有系統全部管理功能;- 也可以根據工作職能來劃分角色,比如設置行政管理角色,綁定流程管理功能;- 權限的劃分可以細緻到 數據的瀏覽、新建、刪除、修改等操作行為 - 用戶可以關聯多個角色組,並繼承多個角色組的權限本文更多的是對