3分钟掌握JeecgBoot权限注解:@AutoLog+@PermissionData实战指南

3分钟掌握JeecgBoot权限注解:@AutoLog+@PermissionData实战指南

【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架,用于快速开发企业级应用。适合在 Java 应用开发中使用,提高开发效率和代码质量。特点是提供了丰富的组件库、模块化架构和自动化配置方式。 【免费下载链接】jeecg-boot 项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

你还在手动编写操作日志?还在为数据权限控制写大量重复代码?本文将带你一文掌握JeecgBoot两大核心权限注解——@AutoLog(自动日志)和@PermissionData(数据权限),让权限开发效率提升80%!读完本文你将获得:

  • @AutoLog注解3个核心参数的配置方法
  • @PermissionData实现数据权限控制的底层逻辑
  • 2个注解结合使用的实战案例
  • 权限注解避坑指南

一、@AutoLog:一行代码实现操作日志记录

1.1 注解定义与核心参数

@AutoLog注解(定义文件:org/jeecg/common/aspect/annotation/AutoLog.java)通过AOP切面技术自动记录用户操作,核心参数如下:

参数名类型默认值说明
valueString""日志内容描述(必填)
logTypeint2日志类型:0-操作日志,1-登录日志,2-定时任务
operateTypeint0操作类型:1-查询,2-添加,3-修改,4-删除
moduleModuleTypeCOMMON模块类型(枚举)

1.2 使用示例:用户管理模块

在SysUserController中添加用户时自动记录日志:

@AutoLog(value = "用户管理-新增用户", operateType = 2, module = ModuleType.SYSTEM)
@PostMapping("/add")
public Result<?> add(@RequestBody SysUser sysUser) {
    sysUserService.save(sysUser);
    return Result.OK("新增成功");
}

执行后会在数据库表sys_log中生成如下记录:

INSERT INTO sys_log (id, log_content, log_type, operate_type, module, user_id, create_time)
VALUES ('123', '用户管理-新增用户', 2, 2, 'SYSTEM', 'admin', '2025-10-24 10:00:00');

1.3 工作流程

mermaid

二、@PermissionData:前端组件级的数据权限控制

2.1 注解原理与参数

@PermissionData注解(定义文件:org/jeecg/common/aspect/annotation/PermissionData.java)通过关联前端页面组件实现数据权限过滤,唯一核心参数:

参数名类型默认值说明
pageComponentString""前端页面组件路径(如"system/UserList")

2.2 权限控制实现

权限切面类PermissionDataAspect.java会拦截注解标记的方法,通过以下步骤实现数据过滤:

  1. 获取当前用户角色权限
  2. 根据pageComponent查询预配置的数据权限规则
  3. 动态拼接SQL条件(如create_by = '当前用户ID'
  4. 注入查询条件到MyBatisPlus的查询Wrapper中

2.3 使用示例:租户数据隔离

在SysTenantController中控制租户列表只能查看自己有权限的租户:

@PermissionData(pageComponent = "system/TenantList")
@GetMapping("/list")
public Result<?> list(SysTenant tenant) {
    List<SysTenant> list = sysTenantService.list(Wrappers.query(tenant));
    return Result.OK(list);
}

实际执行的SQL会自动追加权限条件:

SELECT * FROM sys_tenant WHERE del_flag = 0 AND tenant_id IN (
    SELECT tenant_id FROM sys_role_tenant WHERE role_id IN (
        SELECT role_id FROM sys_user_role WHERE user_id = '当前用户ID'
    )
)

三、实战案例:用户编辑功能权限控制

3.1 完整代码实现

@AutoLog(value = "用户管理-编辑用户", operateType = 3, module = ModuleType.SYSTEM)
@PermissionData(pageComponent = "system/UserList")
@PutMapping("/edit")
public Result<?> edit(@RequestBody SysUser sysUser) {
    // 数据权限自动校验:只能编辑本部门用户
    sysUserService.updateById(sysUser);
    return Result.OK("编辑成功");
}

3.2 执行流程

mermaid

四、避坑指南与最佳实践

  1. 参数必填项:@AutoLog的value参数必须填写,否则日志内容为空
  2. 操作类型规范:operateType建议使用枚举常量(如OperateType.EDIT)而非硬编码数字
  3. 组件路径匹配:pageComponent必须与前端路由配置完全一致(区分大小写)
  4. 性能优化:数据权限过滤会增加SQL复杂度,建议对高频查询接口添加缓存
  5. 权限调试:开启日志DEBUG模式可查看自动生成的权限SQL:
logging:
  level:
    org.jeecg.common.aspect: debug

五、总结与扩展学习

@AutoLog和@PermissionData注解是JeecgBoot权限体系的核心组件,分别解决了操作审计数据隔离两大企业级需求。更多权限控制功能可参考:

  • 官方文档:权限管理专题
  • 代码生成器:自动生成带权限注解的CRUD代码
  • 表单权限:通过@Dict注解控制字段级权限

掌握这两个注解,可让你的权限开发从"重复造轮子"转变为"注解驱动开发",真正实现"一行注解,万事大吉"!记得点赞收藏,下期我们将揭秘JeecgBoot的按钮权限控制实现原理。

【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架,用于快速开发企业级应用。适合在 Java 应用开发中使用,提高开发效率和代码质量。特点是提供了丰富的组件库、模块化架构和自动化配置方式。 【免费下载链接】jeecg-boot 项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

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

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

抵扣说明:

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

余额充值