[CLAUDE] Fix: ApprovalWorkflowsV2 GET ai authenticated cũng đc — Drafter pick workflow lúc create PE
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m14s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m14s
Bug UAT 2026-05-08: user Drafter (nv.test) login Workspace tạo phiếu B, dropdown "Quy trình duyệt" empty silent. Sample seed B đã chạy đúng (Designer admin hiển thị sample + clone v02 active) nhưng Workspace empty. Root cause: class-level [Authorize(Policy = "Workflows.Read")] → non-admin role 403 Forbidden khi GET /api/approval-workflows-v2. TanStack Query catch error silent → dropdown empty không có warning. Fix: - Class-level [Authorize] only (any authenticated) - GET inherit class policy (Drafter cần list workflow để pick — read-only) - POST + DELETE giữ [Authorize(Policy = "Workflows.Create")] — admin-only Designer Workflow data không nhạy cảm — chỉ là cấu hình quy trình. Validate ApplicableType match PE.Type ở Create command đã có. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -7,11 +7,15 @@ namespace SolutionErp.Api.Controllers;
|
|||||||
|
|
||||||
// Quy trình duyệt MỚI (Mig 22 — Session 17, 2026-05-08).
|
// Quy trình duyệt MỚI (Mig 22 — Session 17, 2026-05-08).
|
||||||
// Schema riêng để UAT, KHÔNG đụng WorkflowDefinition cũ.
|
// Schema riêng để UAT, KHÔNG đụng WorkflowDefinition cũ.
|
||||||
// Reuse policy "Workflows.Read"/"Workflows.Create" giống PE/Contract designer
|
// Authorization split:
|
||||||
// — admin đã có quyền quản lý workflow nói chung.
|
// - GET Overview: chỉ cần authenticated — Drafter cần list workflow để pick
|
||||||
|
// lúc create PE/HĐ (read-only, không expose business data nhạy cảm).
|
||||||
|
// - POST/DELETE: policy "Workflows.Create" — admin-only Designer.
|
||||||
|
// Bug fix 2026-05-08: trước class-level "Workflows.Read" → Drafter 403 →
|
||||||
|
// Workspace dropdown empty silent (không thấy sample workflow đã seed).
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("api/approval-workflows-v2")]
|
[Route("api/approval-workflows-v2")]
|
||||||
[Authorize(Policy = "Workflows.Read")]
|
[Authorize]
|
||||||
public class ApprovalWorkflowsV2Controller(IMediator mediator) : ControllerBase
|
public class ApprovalWorkflowsV2Controller(IMediator mediator) : ControllerBase
|
||||||
{
|
{
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
|
|||||||
Reference in New Issue
Block a user