从菜单到数据权限:Jeesite权限管理全方位实战指南

从菜单到数据权限:Jeesite权限管理全方位实战指南

【免费下载链接】jeesite Java rapid development platform, based (Spring Boot, Spring MVC, Apache Shiro, MyBatis, Beetl, Bootstrap, AdminLTE), online code generation, including modules: Organization, role users, menu and button authorization, data permissions, system parameters, content management, workflow, etc. Loose coupling design is adopted; one key skin switch; account security Settings, password policies; Online scheduled task configuration; Support cluster, support SAAS; Support for multiple data sources 【免费下载链接】jeesite 项目地址: https://gitcode.com/gh_mirrors/jee/jeesite

一、权限管理体系概览

Jeesite作为Java快速开发平台,采用Spring Boot+Apache Shiro的权限架构,实现从页面菜单到数据行级的立体化权限控制。核心权限模块位于packages/core/目录,通过RBAC(基于角色的访问控制)模型,支持组织、角色、用户三级权限分配,覆盖功能权限、按钮权限、数据权限等维度。

权限控制流程如下: mermaid

二、菜单权限控制

2.1 路由权限动态生成

系统通过packages/core/store/modules/permission.ts中的buildRoutesAction方法,根据用户角色动态构建可访问路由。支持三种权限模式:

  • 角色模式(ROLE):基于角色过滤路由
  • 路由映射模式(ROUTE_MAPPING):路由与菜单联动控制
  • 后端模式(BACK):完全由后端接口返回路由数据

核心代码实现:

// 权限模式判断逻辑
switch (permissionMode) {
  case PermissionModeEnum.ROLE:
    routes = filter(asyncRoutes, routeFilter);
    routes = flatMultiLevelRoutes(routes);
    break;
  case PermissionModeEnum.BACK:
    routeList = (await menuRouteApi()) as AppRouteRecordRaw[];
    routeList = transformObjToRoute(routeList);
    routes = [...asyncRoutes, ...routeList];
    break;
}

2.2 菜单展示控制

前端菜单渲染基于权限过滤后的路由数据,通过packages/core/router/helper/menuHelper.tstransformRouteToMenu方法转换为菜单结构。菜单图标使用packages/assets/icons/目录下的SVG资源,支持明暗主题切换。

三、按钮级权限控制

3.1 权限指令实现

系统提供v-auth自定义指令实现按钮级权限控制,定义于packages/core/directives/permission.ts

// 权限检查逻辑
function isAuth(el: Element, binding: any) {
  const { hasPermission } = usePermission();
  const value = binding.value;
  if (!value) return;
  if (!hasPermission(value)) {
    el.parentNode?.removeChild(el);
  }
}

3.2 使用示例

在Vue组件中通过指令控制按钮显示:

<template>
  <button v-auth="['sys:user:add']">新增用户</button>
  <button v-auth="['sys:user:edit']">编辑用户</button>
</template>

权限码格式采用:分隔的三级结构,对应模块:功能:操作

四、数据权限控制

4.1 权限码存储与校验

用户权限码列表存储在PermissionStore中,通过packages/core/store/modules/permission.tssetPermCodeList方法保存。权限校验通过hasPermission方法实现,支持多权限逻辑判断。

4.2 数据行级过滤

后端通过Shiro的过滤器链和自定义数据权限注解,实现SQL层面的数据权限过滤。核心原理是在SQL执行时动态添加数据权限条件,如:

-- 数据权限过滤示例
SELECT * FROM sys_user 
WHERE org_code IN (
  SELECT org_code FROM sys_role_data WHERE role_id = #{currentRoleId}
)

五、权限管理最佳实践

5.1 权限设计原则

  1. 最小权限原则:仅授予用户完成工作所需的最小权限
  2. 职责分离原则:关键操作需多角色协作完成
  3. 权限定期审计:通过packages/core/views/sys/下的权限审计功能定期检查权限分配

5.2 常见问题解决

  • 权限不生效:检查权限码是否正确、用户角色是否分配
  • 菜单不显示:确认路由配置的meta.roles属性与用户角色匹配
  • 数据权限异常:检查数据权限过滤器配置及SQL拦截器

六、权限配置界面

系统提供可视化权限配置界面,位于系统管理模块下:

配置界面支持拖拽排序、批量操作,权限分配采用树形结构展示,直观易用。

七、总结

Jeesite权限管理系统通过前后端协同,实现了从菜单到数据的全链路权限控制。核心实现基于packages/core/模块,采用RBAC模型和指令式权限控制,兼顾安全性与易用性。开发人员可通过扩展权限码体系和数据权限过滤器,满足复杂业务场景的权限需求。

【免费下载链接】jeesite Java rapid development platform, based (Spring Boot, Spring MVC, Apache Shiro, MyBatis, Beetl, Bootstrap, AdminLTE), online code generation, including modules: Organization, role users, menu and button authorization, data permissions, system parameters, content management, workflow, etc. Loose coupling design is adopted; one key skin switch; account security Settings, password policies; Online scheduled task configuration; Support cluster, support SAAS; Support for multiple data sources 【免费下载链接】jeesite 项目地址: https://gitcode.com/gh_mirrors/jee/jeesite

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值