权限管理web页面
Go to file
bunny 93dc470633 📝 更新/修改文档 2025-05-26 09:23:27 +08:00
.vite/deps 💄 feat: 移动端登录logo问题 2025-05-06 16:32:56 +08:00
.vscode 🚚 feat: 新增分支删除按钮权限 2025-05-05 09:08:22 +08:00
build feat: 显示页面调整 2025-04-29 23:21:40 +08:00
docker 💩 feat: 改成restful风格 2025-05-12 21:22:53 +08:00
images docs: 📚 更新文档 2025-04-29 00:00:37 +08:00
public fix: 🧩 删除不需要内容 2024-11-12 18:29:52 +08:00
src 🐛 更新权限表单逻辑并修复索引列标签 2025-05-26 09:22:25 +08:00
types 🎨 feat: 修改代码格式;适配后端文件 2025-05-09 17:50:37 +08:00
.browserslistrc init 2024-09-26 09:38:02 +08:00
.dockerignore init 2024-09-26 09:38:02 +08:00
.editorconfig init 2024-09-26 09:38:02 +08:00
.env feat: 与上游合并 2025-04-29 18:18:07 +08:00
.env.development feat: 与上游合并 2025-04-29 18:18:07 +08:00
.env.production fix: 消息显示问题 2025-05-01 18:24:43 +08:00
.env.staging feat: 与上游合并 2025-04-29 18:18:07 +08:00
.gitattributes feat: 与上游合并 2025-04-29 18:18:07 +08:00
.gitignore feat: 与上游合并 2025-04-29 18:18:07 +08:00
.lintstagedrc init 2024-09-26 09:38:02 +08:00
.markdownlint.json init 2024-09-26 09:38:02 +08:00
.npmrc init 2024-09-26 09:38:02 +08:00
.nvmrc feat: 与上游合并 2025-04-29 18:18:07 +08:00
.prettierignore feat: 与上游合并 2025-04-29 18:18:07 +08:00
.prettierrc.js style: 格式化代码 2025-04-28 09:39:28 +08:00
.stylelintignore init 2024-09-26 09:38:02 +08:00
LICENSE feat: 与上游合并 2025-04-29 18:18:07 +08:00
ReadMe-en.md 📝 更新/修改文档 2025-05-26 09:23:27 +08:00
ReadMe.md 📝 更新/修改文档 2025-05-26 09:23:27 +08:00
commitlint.config.js media: 🎁 添加批量添加权限文件 2024-10-09 17:00:10 +08:00
eslint.config.js refactor: 〽️ 重构菜单内容 2025-04-25 16:21:15 +08:00
index.html feat: 与上游合并 2025-04-29 18:18:07 +08:00
lint-staged.config.js init 2024-09-26 09:38:02 +08:00
package.json 🐛 feat: 精确到按钮查询不显示 2025-05-07 19:34:05 +08:00
pnpm-lock.yaml fix: 消息显示问题 2025-05-01 18:24:43 +08:00
postcss.config.js feat: 与上游合并 2025-04-29 18:18:07 +08:00
push.sh feat: 添加推送脚本 2025-04-07 14:50:44 +08:00
stylelint.config.js init 2024-09-26 09:38:02 +08:00
tailwind.config.ts refactor: 〽️ 重构菜单内容 2025-04-25 16:21:15 +08:00
tsconfig.json feat: 显示页面调整 2025-04-29 23:21:40 +08:00
vite.config.ts fix: 消息显示问题 2025-05-01 18:24:43 +08:00

ReadMe.md

BunnyAuth动态权限控制简介

GitHub StarsGitHub forksGitHub contributorsGitHub LicenseGitHub top languageGitHub Repo Size

[!IMPORTANT]

开源权限模板Pure-admin

Pure-admin文档https://pure-admin.github.io/pure-admin-doc

默认凭证

项目中有一个默认管理员,数据库中用户id1

用户名:Administrator

密码:admin123

[!WARNING]

如果刚初始化登录的时候,发现管理员【Administrator】密码错误。

找到数据库sys_user,将Administrator替换成下面的密码。

$2a$10$h5BUwmMaVcEuu7Bz0TPPy.PQV8JP6CFJlbHTgT78G1s0YPIu2kfXe

可粗可细的权限控制,多平台文件上传。

📽️视频说明地址

介绍视频视频

Github地址

Gitee地址

🚀 项目简介

一个基于 Spring Security 6 的现代化动态权限控制系统,提供完整的 RBAC 权限管理解决方案。支持前后端分离架构,可灵活配置细粒度权限控制。

😋控制器上注解说明

整个项目是基于URL方便定义权限接口即使项目中接口不存在通过URL的方式增删权限。

比如项目需要为dept分配了角色,这个角色可以访问dept下所有的接口,那么就可以写成api/dept/**,如果需要dept下某个接口,/api/dept/aaa/bbb,这种形式。

如果针对分页查询分页参数写在URL上的可以这样做/api/dept/*/*这样就可以做到灵活的权限控制。

但是在部分场景下接口就是我们的权限这时如果手动一个一个添加URL很麻烦所以使用的swagger自带的注解和PermissionTag,自定义的注解的方式,如果这时的项目需求是,为整个接口添加权限,就可以用反射的方式添加。

使用放射的方式已经放在controller的目录下ReadMe文档即可。

重大更新

核心改进

v4.0.0

  • 全面重构后端接口、实体类等重构前端重构部分j+优化操作体验
  • 批量操作支持
    • 菜单管理:完善属性内容
    • 权限管理:支持 JSON/Excel 导入导出
    • 角色管理:支持 Excel 批量更新
    • 多语言配置:支持 JSON/Excel 更新(全量替换模式)

v4.0.1

  • 文件系统支持多平台,只需要手动配置即可。
  • 有需要参考文档:https://x-file-storage.xuyanwu.cn/#/
  • 文件删除和下载等需要实现对应接口FileRecorder ,目前以实现,对应代码和控制器都在文件夹file如有需要修改可以参考【x-file-storage】文档修改。

🧠用法提示

[!TIP]

多语言使用提示:

虽然直接让用户操作JSON文件有一定门槛多数用户不熟悉JSON格式但在多语言项目开发中JSON格式具有独特优势

  1. 结构化特性 - 纯文本格式便于AI解析处理
  2. 高效翻译流程:
    • 开发者只需完成中文版本
    • 上传JSON文件至AI翻译工具
    • 简单指令即可批量生成英文/繁体中文/韩语等版本
  3. 显著节省开发时间 - 实现"一次编写,多语言适配"的高效工作流

🔐 权限控制体系

image-20250428225337843

访问规则配置

通过 WebSecurityConfig 配置

路径类型 示例 访问要求 配置方式
公开接口 /api/public/** 无需认证 路径包含 public 关键字
私有接口 /api/private/** 需登录 路径包含 private 关键字

路径匹配策略

public static String[] annotations = { ... };

// 配置示例
http.authorizeHttpRequests(auth -> auth
    .authorizeHttpRequests(authorize -> authorize
    .requestMatchers(annotations).permitAll()
);

Maven工程结构

bunny-auth/
├── auth-api      # 接口定义层
├── auth-core     # 核心模块
│   ├── config    # 安全配置
│   └── domain    # domain
│   └── ......    # 还要很多...
├── service       # 业务实现
└── dao           # 数据持久层

🛠️ 应用场景

1. 纯前端控制模式

前端原理详情查看Pure文档https://pure-admin.cn/pages/RBAC/#%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE

image-20250428230444403

  • 页面控制
    1. 为路由菜单分配角色
    2. 为用户分配角色
  • 按钮控制
    // 前端权限码配置
    const auth = {
      add: ['i18nType::add'],
      update: ['i18nType::update'],
      delete: ['i18nType::delete'],
    };
    

2. 纯后端控制模式

  • 接口级权限:分页这种就可以添加为/api/permission/*/*

    @Tag(name = "系统权限")
    @PermissionTag(permission = "permission::*")
    @RestController
    @RequestMapping("api/permission")
    public class PermissionController {
        @Operation(summary = "分页查询")
        @PermissionTag(permission = "permission::query")
        @GetMapping("{page}/{limit}")
        public Result<PageResult<PermissionVo>> getPermissionPage(
            @PathVariable Integer page,
            @PathVariable Integer limit) {
            // ...
        }
    }
    

3. 全栈控制模式

前两个结合

🛡️ 安全配置

路径匹配策略

AntPath详情https://juejin.cn/spost/7498247273660743732

模式 示例 说明
精确匹配 /api/user 完全匹配路径
通配符 /api/user/* 匹配单级路径
多级通配 /api/user/** 匹配多级路径
方法限定 GET /api/user 匹配特定HTTP方法

🧰 技术栈

😄前端

  • Vue 3 + PureAdmin 模板
  • 自定义权限组件
  • 国际化支持

😃后端

  • Spring Boot 3 + Spring Security 6
  • JDK 17
  • MySQL + Redis + MinIO
  • Swagger + Knife4j 文档

😀开发环境

根据不同docker 启动方式不一样

# 一键启动依赖服务
docker-compose up -d
# 新版的docker
docker compose up -d

📚 最佳实践

  1. 注解规范

    @Tag(name = "模块名称", description = "模块描述")
    @Operation(summary = "接口摘要", tags = {"权限码"})
    // 或者
    @Operation(summary = "接口摘要", tags = "权限码")
    
  2. 权限码设计

    • 模块::操作 (如 user::create)
    • 分层级设计 (如 system:user:update)
  3. 批量操作

    • 使用 Excel/JSON 管理大量权限配置
    • 定期备份权限配置

🌟 项目优势

  1. 真正的动态控制 - 无需硬编码权限逻辑
  2. 灵活的数据导入 - 支持多种文件格式
  3. 细粒度控制 - 从页面到按钮的多层级权限
  4. 现代化技术栈 - 基于最新 Spring 生态
  5. 开箱即用 - 提供完整 Docker 部署方案

📌 注意事项

  1. 多语言更新会完全替换现有配置
  2. 生产环境建议禁用 Swagger 端点
  3. 复杂权限建议使用 Excel 批量管理

📈 后续规划

暂无

📏前后端接口规范

🌐前端示例规范

操作 API 层 Pinia 层
查询单个 getUser loadUser
查询列表 getUserList loadUserList
分页查询 getUserPage fetchUserPage
新增数据 createUser addUser
更新数据 updateUser editUser
删除数据 deleteUser removeUser

🛟后端接口示例规范

遵循Restful

操作 RESTful
查询列表 GET /users
分页查询 GET /users/{page}/{limit}
查询单个 GET /users/{id}
新增 POST /users
更新 PUT /users/{id}
删除 DELETE /users/{id}

wx_alipay