菜单与权限管理

2025-12-04 21:58 更新

菜单与权限管理

DoraCMS 提供了灵活的菜单和权限管理系统,支持细粒度的权限控制,帮助你构建安全的管理后台。

菜单管理概述

功能特点

  • 层级菜单:支持多级菜单结构
  • 权限绑定:菜单与权限关联
  • 按钮权限:页面级按钮权限控制
  • 动态加载:根据用户角色动态显示菜单

菜单管理界面

菜单结构

菜单层级

DoraCMS 支持多级菜单:

一级菜单(模块)
├── 二级菜单(功能)
│   ├── 三级菜单(子功能)
│   └── 按钮权限(操作)
└── 二级菜单(功能)

菜单配置

每个菜单项包含以下配置:

基本信息

  • 菜单名称:显示在界面上的名称
  • 菜单图标:菜单前的图标(可选)
  • 排序:菜单的显示顺序
  • 是否启用:控制菜单是否显示

路由信息

  • 路由路径:前端路由地址
  • 组件路径:对应的前端组件

权限信息

  • 权限代码:唯一的权限标识
  • API 路径:关联的后端 API

菜单配置

创建菜单

创建一级菜单

  1. 进入"系统设置" → "菜单管理"
  2. 点击"新增菜单"
  3. 填写菜单信息

配置示例

{
  "name": "内容管理",
  "icon": "file-text",
  "sort": 1,
  "enable": true,
  "type": "module"  // 模块类型
}

创建二级菜单

  1. 选择父级菜单
  2. 点击"添加子菜单"
  3. 填写菜单信息

配置示例

{
  "name": "文章管理",
  "parentId": "parent_menu_id",
  "path": "/content/article",
  "component": "content/article/index",
  "permissionCode": "content:article:view",
  "api": "content/getList",
  "sort": 1,
  "enable": true
}

菜单类型

模块菜单(一级):

  • 用于组织功能模块
  • 通常不关联具体页面
  • 只起到分组作用

功能菜单(二级/三级):

  • 关联具体的功能页面
  • 需要配置路由和组件
  • 绑定权限代码

菜单类型

按钮权限

什么是按钮权限

按钮权限是页面级的操作权限,控制用户是否可以执行特定操作,如:

  • 新增
  • 编辑
  • 删除
  • 导出
  • 审核

配置按钮权限

在菜单配置中添加按钮权限:

{
  "name": "文章管理",
  "buttons": [
    {
      "desc": "新增文章",
      "permissionCode": "content:article:create",
      "api": "content/create",
      "httpMethod": "POST"
    },
    {
      "desc": "编辑文章",
      "permissionCode": "content:article:update",
      "api": "content/update",
      "httpMethod": "PUT"
    },
    {
      "desc": "删除文章",
      "permissionCode": "content:article:delete",
      "api": "content/removes",
      "httpMethod": "DELETE"
    }
  ]
}

按钮配置说明

描述 (desc):

  • 按钮的功能描述
  • 显示在权限配置界面

权限代码 (permissionCode):

  • 唯一的权限标识
  • 格式:模块:功能:操作
  • 示例:content:article:create

API 路径 (api):

  • 关联的后端 API
  • 格式:controller/method
  • 示例:content/create

HTTP 方法 (httpMethod):

  • API 的 HTTP 请求方法
  • 支持:GET、POST、PUT、PATCH、DELETE
  • 默认:POST

按钮权限配置

按钮权限验证

系统会自动验证按钮配置的安全性:

API 格式验证

  • 必须符合 controller/method 格式
  • 只能包含字母和数字
  • 不能包含特殊字符

权限代码验证

  • 必须填写权限代码(严格模式)
  • 权限代码必须唯一
  • 建议使用统一的命名规范

HTTP 方法验证

  • 必须是支持的 HTTP 方法
  • 不区分大小写
  • 无效方法会被拒绝

权限代码规范

命名规范

建议使用以下格式:

模块:功能:操作

示例

content:article:view      # 查看文章
content:article:create    # 创建文章
content:article:update    # 更新文章
content:article:delete    # 删除文章
content:article:publish   # 发布文章


user:manage:view          # 查看用户
user:manage:create        # 创建用户
user:manage:update        # 更新用户
user:manage:delete        # 删除用户


system:config:view        # 查看配置
system:config:update      # 更新配置

权限层级

模块级权限

  • 控制整个模块的访问
  • 示例:content:*

功能级权限

  • 控制具体功能的访问
  • 示例:content:article:*

操作级权限

  • 控制具体操作的执行
  • 示例:content:article:delete

权限层级

角色与权限

角色管理

在"系统设置" → "角色管理"中管理角色:

创建角色

  1. 点击"新增角色"
  2. 填写角色名称和描述
  3. 选择菜单权限
  4. 选择按钮权限
  5. 保存角色

角色示例

{
  "name": "内容编辑",
  "description": "负责内容的创建和编辑",
  "menus": [
    "menu_content_id",
    "menu_article_id"
  ],
  "permissions": [
    "content:article:view",
    "content:article:create",
    "content:article:update"
  ]
}

分配角色

在"用户管理"中为用户分配角色:

  1. 编辑用户信息
  2. 选择用户角色
  3. 保存更改

注意

  • 一个用户可以拥有多个角色
  • 权限会自动合并
  • 超级管理员拥有所有权限

角色分配

权限验证

前端权限验证

在前端使用权限指令:

<!-- 按钮权限控制 -->
<el-button 
  v-permission="'content:article:create'"
  @click="handleCreate">
  新增文章
</el-button>


<!-- 菜单权限控制 -->
<el-menu-item 
  v-if="hasPermission('content:article:view')"
  index="/content/article">
  文章管理
</el-menu-item>

后端权限验证

后端 API 会自动验证权限:

// 控制器中的权限验证
async create(ctx) {
  // 系统会自动验证用户是否有 content:article:create 权限
  // 如果没有权限,会返回 403 错误

  
  const article = await ctx.service.content.create(data);
  ctx.helper.renderSuccess(ctx, { data: article });
}

权限检查流程

  1. 用户登录:获取用户角色和权限
  2. 菜单加载:根据权限过滤菜单
  3. 页面访问:检查页面访问权限
  4. 操作执行:验证按钮操作权限
  5. API 调用:后端验证 API 权限

权限验证流程

最佳实践

权限设计原则

  1. 最小权限原则
    • 只授予必要的权限
    • 避免权限过度分配
    • 定期审查权限

  1. 职责分离
    • 不同角色负责不同功能
    • 避免权限冲突
    • 明确责任边界

  1. 权限继承
    • 合理使用角色继承
    • 避免权限重复配置
    • 简化权限管理

菜单组织建议

  1. 逻辑分组
    • 按业务模块组织菜单
    • 保持菜单层级清晰
    • 避免菜单过深

  1. 命名规范
    • 使用清晰的菜单名称
    • 保持命名一致性
    • 避免歧义

  1. 图标使用
    • 为菜单添加合适的图标
    • 提高界面识别度
    • 保持图标风格统一

安全建议

  1. 严格模式
    • 启用权限代码强制绑定
    • 验证 API 路径格式
    • 检查 HTTP 方法有效性

  1. 定期审计
    • 检查权限配置
    • 清理无用权限
    • 更新权限文档

  1. 测试验证
    • 测试不同角色的权限
    • 验证权限隔离
    • 检查越权访问

常见问题

菜单不显示

问题:用户登录后看不到某些菜单

解决方案

  1. 检查菜单是否启用
  2. 确认用户角色是否包含该菜单权限
  3. 检查菜单的父级菜单是否有权限
  4. 清除缓存重新登录

按钮权限无效

问题:配置了按钮权限但仍然可以操作

解决方案

  1. 检查权限代码是否正确
  2. 确认角色是否包含该权限
  3. 检查前端权限指令是否正确使用
  4. 验证后端 API 权限验证

API 路径验证失败

问题:保存菜单时提示 API 路径格式错误

解决方案

  1. 确保 API 路径符合 controller/method 格式
  2. 只使用字母和数字
  3. 不要包含特殊字符
  4. 检查路径长度(不超过 100 字符)

权限代码冲突

问题:提示权限代码已存在

解决方案

  1. 检查是否有重复的权限代码
  2. 使用唯一的权限标识
  3. 遵循命名规范
  4. 查看现有权限列表
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号