菜单权限功能设计

一. 方案1

菜单数据

菜单数据如果非常简单,固定不变,我们可以直接用json文件来维护。每个菜单有个id标识唯一性,菜单有父子关系,最多三级。有些菜单还支持配置按钮权限。

XML 复制代码
{
  "menu": [
    {
      "parent_id": "",
      "id": "data_analysis",
      "name": "数据分析",
      "button_list": null,
      "children": [
        {
          "parent_id": "data_analysis",
          "id": "data_analysis_1",
          "name": "商家信息",
          "button_list": [
            {
              "button_name": "搜索",
              "button_id": "data_analysis_1_search"
            }
          ],
          "children": []
        }
      ]
    }
  ]
}

路由权限数据

菜单和其相关的按钮都可以绑定多个路由,一个角色配置了菜单和按钮的权限,则其就具备对应的路由权限。路由权限数据也可用json来维护,内容就是简单的kv,key是菜单id或者按钮id,value是一个数组存一批路由。

复制代码
{
  "data_analysis_1": [
    "/admin/data/list"
  ],
  "data_analysis_1_search": [
    "/admin/data/detail"
  ]
}

角色表和角色权限表

按照角色分配菜单权限,所以分配的对象是菜单。我们需要维护一个角色表。比如 admin_role, 核心字段就是角色的唯一标识,比如 role_id。

给用户分配的菜单,需要一个角色菜单表记录它们的关联。有些菜单中还有按钮等操作单元,我们统一可以记录角色和这些按钮操作的关系。所以创建个表,比如 admin_role_access

表中字段

  • menu_id_data:
    • 存一个角色有哪些菜单配置,用json维护一个数组,元素就是每个菜单的id。
    • 比如如果没用权限,那么 menu_id_data的值为 {"menu_data": []}
    • 如果给某个角色勾选了一个菜单权限,这个菜单id就会存起来,比如{"menu_data": ["data_analysis", "data_analysis_1"]}
  • button_id_data:
    • 存一个角色有哪些菜单的button权限,也是用json维护的数组,元素就是每个button的id。
    • 比如如果没用权限,那么 button_id_data的值为{"button_data": []}
    • 如果给某个角色勾选了某个菜单下的按钮权限,这个按钮id就会存起来,比如{"button_data": ["data_analysis_1_search"]}
相关推荐
不剪发的Tony老师7 分钟前
Mathesar:一款基于PostgreSQL的在线电子表格
数据库·postgresql·电子表格
万邦科技Lafite3 小时前
京东按图搜索京东商品(拍立淘) API (.jd.item_search_img)快速抓取数据
开发语言·前端·数据库·python·电商开放平台·京东开放平台
金仓拾光集4 小时前
__金仓数据库平替MongoDB实战:从多模兼容到高可用落地__
数据库·mongodb·数据库平替用金仓·金仓数据库
北邮-吴怀玉4 小时前
6.1.2.2 大数据方法论与实践指南-离线任务SQL 任务开发规范
大数据·数据库·sql
流烟默4 小时前
MongoDB索引创建语法分析
数据库·mongodb
金仓拾光集4 小时前
__国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南__
数据库·mongodb·数据库平替用金仓·金仓数据库
初学者_xuan4 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis数据库基础
运维·数据库·自动化
小马哥编程4 小时前
【软考架构】案例分析:MongoDB 如何存储非结构化数据以及其矢量化存储的优点。
数据库·mongodb·架构
默 语4 小时前
MySQL中的数据去重,该用DISTINCT还是GROUP BY?
java·数据库·mysql·distinct·group by·1024程序员节·数据去重
哲Zheᗜe༘5 小时前
了解学习Redis主从复制
数据库·redis·学习