diff --git a/.kiro/specs/marker-pole-permission-fix/.config.kiro b/.kiro/specs/marker-pole-permission-fix/.config.kiro new file mode 100644 index 0000000..5120a57 --- /dev/null +++ b/.kiro/specs/marker-pole-permission-fix/.config.kiro @@ -0,0 +1 @@ +{"specId": "fb54238e-822c-47bb-bf0e-8eb9bf8e14e7", "workflowType": "requirements-first", "specType": "bugfix"} \ No newline at end of file diff --git a/.kiro/specs/marker-pole-permission-fix/bugfix.md b/.kiro/specs/marker-pole-permission-fix/bugfix.md new file mode 100644 index 0000000..de545ee --- /dev/null +++ b/.kiro/specs/marker-pole-permission-fix/bugfix.md @@ -0,0 +1,29 @@ +# Bugfix Requirements Document + +## Introduction + +标石/杆号牌模块的前端权限控制失效。用户在管理后台仅被分配了"查看权限"(`odfmarkerpoles:list` / `odfmarkerpoles:query`),但在 uniapp 端的标石/杆号牌列表页面中,"新增"按钮无条件显示,用户可以点击进入新增页面并提交数据。虽然后端 API 已有 `odfmarkerpoles:add` 权限校验会拒绝请求,但前端不应暴露无权限的操作入口,这会造成用户体验混乱和安全隐患。 + +## Bug Analysis + +### Current Behavior (Defect) + +1.1 WHEN 用户仅拥有查看权限(无 `odfmarkerpoles:add`)访问标石/杆号牌列表页时 THEN 系统无条件显示"新增"按钮,用户可以点击进入新增页面 + +1.2 WHEN 用户仅拥有查看权限(无 `odfmarkerpoles:add`)直接访问或通过 URL 进入标石/杆号牌新增页面时 THEN 系统允许用户进入新增页面并填写表单(提交时后端会拒绝,但前端未做拦截) + +### Expected Behavior (Correct) + +2.1 WHEN 用户仅拥有查看权限(无 `odfmarkerpoles:add`)访问标石/杆号牌列表页时 THEN 系统 SHALL 隐藏"新增"按钮,用户无法看到新增入口 + +2.2 WHEN 用户仅拥有查看权限(无 `odfmarkerpoles:add`)尝试进入标石/杆号牌新增页面时 THEN 系统 SHALL 阻止进入并跳转回列表页,提示用户无权限 + +### Unchanged Behavior (Regression Prevention) + +3.1 WHEN 用户拥有新增权限(`odfmarkerpoles:add`)访问标石/杆号牌列表页时 THEN 系统 SHALL CONTINUE TO 显示"新增"按钮,用户可正常点击进入新增页面 + +3.2 WHEN 用户拥有新增权限(`odfmarkerpoles:add`)进入标石/杆号牌新增页面时 THEN 系统 SHALL CONTINUE TO 允许用户正常填写表单并提交 + +3.3 WHEN 用户拥有超级管理员权限(`*:*:*`)时 THEN 系统 SHALL CONTINUE TO 显示"新增"按钮并允许正常新增操作 + +3.4 WHEN 用户访问标石/杆号牌列表页进行查看操作时 THEN 系统 SHALL CONTINUE TO 正常加载和显示列表数据,不受权限修复影响 diff --git a/.kiro/specs/marker-pole-permission-fix/design.md b/.kiro/specs/marker-pole-permission-fix/design.md new file mode 100644 index 0000000..e95573d --- /dev/null +++ b/.kiro/specs/marker-pole-permission-fix/design.md @@ -0,0 +1,173 @@ +# 标石/杆号牌权限控制修复 Bugfix Design + +## Overview + +标石/杆号牌模块(marker-pole)的前端权限控制缺失,导致无 `odfmarkerpoles:add` 权限的用户仍能看到"新增"按钮并进入新增页面。修复方案为:在列表页通过 `v-if` 条件渲染控制按钮显隐,在新增页通过 `onLoad` 权限守卫阻止无权限用户进入。参考实现为已正确实现权限控制的 `fault-list/index.vue`。 + +## Glossary + +- **Bug_Condition (C)**: 用户不具备 `odfmarkerpoles:add` 权限时,前端仍显示新增按钮并允许进入新增页面 +- **Property (P)**: 无 `odfmarkerpoles:add` 权限时,新增按钮应隐藏,新增页面应拦截并跳转回列表 +- **Preservation**: 有权限用户的新增流程、列表查看功能、超级管理员权限均不受影响 +- **store.hasPermi()**: `odf-uniapp/store/index.js` 中的权限检查方法,检查用户 permissions 数组是否包含指定权限字符串(`*:*:*` 为超级管理员通配) +- **canAdd**: 布尔变量,由 `store.hasPermi('odfmarkerpoles:add')` 返回,控制新增按钮的显隐 + +## Bug Details + +### Bug Condition + +用户不具备 `odfmarkerpoles:add` 权限时,`marker-pole-list/index.vue` 的底部"新增"按钮无条件渲染(无 `v-if` 控制),`marker-pole-add/index.vue` 的 `onLoad` 中无权限校验,导致用户可自由进入新增页面。 + +**Formal Specification:** +``` +FUNCTION isBugCondition(input) + INPUT: input of type { user: User, action: 'view_add_button' | 'enter_add_page' } + OUTPUT: boolean + + RETURN NOT store.hasPermi('odfmarkerpoles:add') + AND input.action IN ['view_add_button', 'enter_add_page'] +END FUNCTION +``` + +### Examples + +- 用户仅有 `odfmarkerpoles:list` 权限,打开标石列表页 → 期望:不显示"新增"按钮;实际:显示"新增"按钮 +- 用户仅有 `odfmarkerpoles:query` 权限,通过 URL 直接访问 `/pages/marker-pole-add/index` → 期望:被拦截并跳转回列表;实际:正常进入新增页面 +- 用户有 `odfmarkerpoles:add` 权限,打开标石列表页 → 期望:显示"新增"按钮;实际:显示"新增"按钮(正确) +- 超级管理员(`*:*:*`),打开标石列表页 → 期望:显示"新增"按钮;实际:显示"新增"按钮(正确) + +## Expected Behavior + +### Preservation Requirements + +**Unchanged Behaviors:** +- 有 `odfmarkerpoles:add` 权限的用户在列表页可正常看到"新增"按钮并进入新增页面 +- 超级管理员(`*:*:*`)的所有操作不受影响 +- 列表页的数据加载、分页、详情跳转功能不受影响 +- 新增页面的表单填写、拍照、定位、提交等功能对有权限用户不受影响 + +**Scope:** +所有不涉及"新增"操作入口的功能不受此修复影响,包括: +- 列表查看和分页加载 +- 详情页查看 +- 返回导航 +- 其他模块的权限控制 + +## Hypothesized Root Cause + +Based on the bug description, the most likely issues are: + +1. **列表页缺少权限条件渲染**: `marker-pole-list/index.vue` 的底部 `bottom-bar`(包含"新增"按钮)没有 `v-if` 条件控制,无条件渲染给所有用户。对比 `fault-list/index.vue` 已正确使用 `v-if="canAdd"` 控制。 + +2. **列表页未引入 store**: `marker-pole-list/index.vue` 的 ` - +