编辑 | blame | 历史 | 原始文档

用户创建任务单权限功能说明

📋 功能概述

在 sys_user 表中新增 can_create_task 字段,用于标识用户是否具有创建任务单的权限。该字段从 OA 系统的 OA_User 表中的 OA_Power 字段同步而来。

🎯 同步规则

OA_Power 字段包含 ,020101, 时,用户具有创建任务单权限。

SQL 判断逻辑
sql CASE WHEN OA_Power LIKE '%,020101,%' THEN '1' ELSE '0' END AS can_create_task

🔨 实现内容

1. 数据库修改

添加字段

文件: sql/add_can_create_task_to_sys_user.sql

ALTER TABLE sys_user ADD COLUMN can_create_task CHAR(1) DEFAULT '0' COMMENT '是否可创建任务单(0否 1是)';
CREATE INDEX idx_can_create_task ON sys_user(can_create_task);

字段说明
- 字段名: can_create_task
- 类型: CHAR(1)
- 默认值: '0' (不可创建)
- 可选值:
- '0': 不可创建任务单
- '1': 可以创建任务单
- 索引: 已添加索引 idx_can_create_task 方便查询

2. 实体类修改

SysUser 实体

文件: ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

新增字段
```java
/** 是否可创建任务单(0否 1是) */
@Excel(name = "可创建任务单", readConverterExp = "0=否,1=是")
private String canCreateTask;

public String getCanCreateTask() {
return canCreateTask;
}

public void setCanCreateTask(String canCreateTask) {
this.canCreateTask = canCreateTask;
}
```

3. DTO 层修改

UserSyncDTO

文件: ruoyi-system/src/main/java/com/ruoyi/system/domain/UserSyncDTO.java

新增字段
```java
/** 是否可创建任务单(0否 1是) */
private String canCreateTask;

public String getCanCreateTask() {
return canCreateTask;
}

public void setCanCreateTask(String canCreateTask) {
this.canCreateTask = canCreateTask;
}
```

4. Mapper 层修改

UserSyncMapper.xml

文件: ruoyi-system/src/main/resources/mapper/system/UserSyncMapper.xml

修改内容
1. 在 resultMap 中添加字段映射
2. 在 SQL 查询中添加 CASE 判断逻辑

<result property="canCreateTask" column="can_create_task" />

<!-- SQL 查询添加 -->
CASE 
    WHEN OA_Power LIKE '%,020101,%' THEN '1'
    ELSE '0'
END AS can_create_task

SysUserMapper.xml

文件: ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

修改内容
1. resultMap 添加字段映射
2. selectUserVo 查询添加字段
3. insertUser 添加字段插入
4. updateUser 添加字段更新

5. Service 层修改

UserSyncServiceImpl

文件: ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserSyncServiceImpl.java

修改内容

更新已存在用户
java if (StringUtils.isNotEmpty(dto.getCanCreateTask())) { existingUser.setCanCreateTask(dto.getCanCreateTask()); }

创建新用户
java if (StringUtils.isNotEmpty(dto.getCanCreateTask())) { newUser.setCanCreateTask(dto.getCanCreateTask()); }

📊 数据流转过程

OA_User (SQL Server)
    ↓
OA_Power LIKE '%,020101,%'
    ↓
SQL CASE 判断
    ↓
UserSyncDTO.canCreateTask
    ↓
SysUser.canCreateTask
    ↓
sys_user.can_create_task

🚀 使用步骤

1. 执行数据库脚本

mysql -u root -p ry-vue < sql/add_can_create_task_to_sys_user.sql

2. 同步用户数据

通过后台管理界面或 API 执行用户同步:
bash POST http://localhost:8080/system/dept/sync/user Headers: Authorization: Bearer {你的token}

3. 验证同步结果

-- 查看具有创建任务单权限的用户
SELECT 
    user_name, 
    nick_name, 
    can_create_task,
    oa_user_id
FROM sys_user
WHERE can_create_task = '1'
  AND del_flag = '0'
ORDER BY create_time DESC;

-- 统计权限分布
SELECT 
    can_create_task,
    CASE can_create_task
        WHEN '1' THEN '可创建'
        ELSE '不可创建'
    END AS permission_label,
    COUNT(*) AS user_count
FROM sys_user
WHERE del_flag = '0'
GROUP BY can_create_task;

💡 使用示例

场景1:查询有权限的用户

// 在 Service 层添加查询方法
public List<SysUser> getUsersWithCreateTaskPermission() {
    SysUser query = new SysUser();
    query.setCanCreateTask("1");
    return userMapper.selectUserList(query);
}

场景2:前端权限控制

// 根据用户权限显示/隐藏创建任务按钮
if (user.canCreateTask === '1') {
    // 显示创建任务按钮
    showCreateTaskButton();
} else {
    // 隐藏创建任务按钮
    hideCreateTaskButton();
}

场景3:后端接口权限验证

@PreAuthorize("@ss.hasPermi('task:create')")
@PostMapping("/create")
public AjaxResult createTask(@RequestBody Task task) {
    SysUser user = SecurityUtils.getLoginUser().getUser();
    if (!"1".equals(user.getCanCreateTask())) {
        return AjaxResult.error("您没有创建任务单的权限");
    }
    // 创建任务逻辑
    return taskService.createTask(task);
}

📝 注意事项

重要提示

  1. 权限同步: 该字段从 OA 系统自动同步,请勿手动修改
  2. 默认值: 新创建用户默认为 '0'(不可创建)
  3. 同步更新: 每次用户同步时会自动更新该字段
  4. 权限粒度: 该字段仅控制是否可创建任务单,不影响其他权限

与其他权限字段的关系

  • can_view_all_consult: 是否可查看所有咨询单(OA_Power LIKE '%,020112,%')
  • can_create_task: 是否可创建任务单(OA_Power LIKE '%,020101,%')

这两个字段互相独立,用户可以同时拥有或分别拥有这些权限。

🔍 验证方法

查看后台用户管理界面

  1. 登录后台管理系统
  2. 进入 系统管理用户管理
  3. 在用户列表中查看 "可创建任务单" 列
  4. 编辑用户时可看到该字段(只读,由同步控制)

数据库验证

-- 检查字段是否存在
SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'sys_user' 
  AND COLUMN_NAME = 'can_create_task';

-- 查看具体用户的权限
SELECT 
    u.user_name,
    u.nick_name,
    u.can_view_all_consult,
    u.can_create_task,
    u.oa_user_id
FROM sys_user u
WHERE u.oa_user_id IS NOT NULL
ORDER BY u.user_id;

📚 相关文件清单

SQL 脚本

  • sql/add_can_create_task_to_sys_user.sql - 添加字段脚本

Java 文件

  • SysUser.java(修改) - 添加字段定义
  • UserSyncDTO.java(修改) - 添加 DTO 字段
  • UserSyncServiceImpl.java(修改) - 添加同步逻辑

Mapper 文件

  • UserSyncMapper.xml(修改) - 添加 SQL 查询逻辑
  • SysUserMapper.xml(修改) - 添加字段映射和操作

文档

  • prd/用户创建任务单权限功能说明.md - 本文档

🎯 常见问题

Q1: 字段值为什么是字符串而不是布尔值?

A: 为了与若依框架的数据字典规范保持一致,使用 '0''1' 字符串表示布尔值。

Q2: 如何手动设置用户权限?

A: 不建议手动修改。该字段应通过 OA 系统的 OA_Power 字段控制,通过用户同步自动更新。

Q3: 用户同步后权限没有变化?

A: 请检查:
1. OA 系统中用户的 OA_Power 字段是否包含 ,020101,
2. 用户同步是否执行成功
3. 查看同步日志确认更新情况

Q4: 如何批量设置用户权限?

A: 在 OA 系统中批量修改用户的 OA_Power 字段,然后执行用户同步即可。


版本: v1.0
更新时间: 2025-12-29
相关功能: 用户同步、权限管理