Files
loan-pricing/doc/implementation-report-2026-05-12-workflow-list-role-data-scope.md

58 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 流程列表角色数据权限实施记录
## 修改日期
2026-05-12
## 需求范围
- 仅控制 `GET /loanPricing/workflow/list` 流程列表接口。
- 超级管理员 `user_id=1`、启用角色名为“管理员”或角色标识为 `headAdmin` 的用户可查看全部流程。
- 非管理员用户只能查看 `loan_pricing_workflow.create_by` 精确等于当前登录人 `昵称-柜员号` 的流程。
- 列表页“创建者”查询参数继续保留,但只按 `create_by` 中的柜员号部分进行模糊匹配。
## 修改内容
- `LoanPricingWorkflow` 增加非表字段 `dataScopeCreateBy`,专用于后端内部数据权限精确过滤。
- `LoanPricingWorkflowServiceImpl.selectLoanPricingPage` 增加流程列表数据权限裁剪:
- 管理员不写入 `dataScopeCreateBy`
- 非管理员写入 `dataScopeCreateBy = nickName + "-" + username`
- 前端传入 `createBy` 时仍保留原查询参数,但不能扩大非管理员可见范围。
- `LoanPricingWorkflowMapper.xml` 增加 `lpw.create_by = #{query.dataScopeCreateBy}` 精确权限条件。
- `LoanPricingWorkflowMapper.xml``createBy` 查询调整为 `SUBSTRING_INDEX(lpw.create_by, '-', -1) LIKE ...`,即只按柜员号模糊匹配。
- 补充 `LoanPricingWorkflowServiceImplTest``LoanPricingWorkflowMapperXmlTest`,覆盖管理员、业务管理员、客户经理、越权创建者查询参数和 XML 条件。
## 验证记录
- 单元测试通过:
```bash
mvn -pl ruoyi-loan-pricing -am -Dtest=LoanPricingWorkflowServiceImplTest,LoanPricingWorkflowMapperXmlTest -Dsurefire.failIfNoSpecifiedTests=false test
```
- 后端打包通过:
```bash
mvn -pl ruoyi-admin -am clean package -DskipTests
```
- API 验证通过:
- `admin/admin123` 查询流程列表返回全量数据,包含测试行和 `若依-admin` 历史行。
- `8929999/123456` 业务管理员查询流程列表返回全量数据。
- `8920001/123456` 客户经理查询流程列表只返回本人创建的测试行。
- 客户经理按 `createBy=8920001` 查询可返回本人测试行。
- 客户经理按昵称 `createBy=测试客户经理` 查询返回 0 条。
- 客户经理按其他柜员号 `createBy=admin` 查询返回 0 条。
- browser-use 真实页面验证通过:
- 管理员登录真实流程列表页,页面显示 `共 40 条`,可见本人测试行和 `若依-admin` 历史行。
- 客户经理登录真实流程列表页,页面只显示本人创建的测试行。
- 客户经理在“创建者”输入 `admin` 后页面显示暂无数据。
- 客户经理在“创建者”输入 `8920001` 后页面重新显示本人测试行。
## 验证数据与清理
- 因当前开发库创建流程接口依赖的模型输出表缺少 `coupon_rate` 字段,无法通过页面新增生成验证流程。
- 本次验证使用一条临时 SQL 测试数据:`serial_num = ROLE_SCOPE_20260512_001``create_by = 测试客户经理-8920001`
- 验证结束后已删除该临时数据,回查剩余数量为 0。