refactor(policy): add centralized decision helpers
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
import type { UserRole } from "@/lib/types"
|
||||||
|
|
||||||
|
export interface Actor {
|
||||||
|
userId: string
|
||||||
|
role: UserRole
|
||||||
|
shopId?: string
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import type { Actor } from "@/lib/policy/actor"
|
||||||
|
import type { PolicyDecision, ReasonCode } from "@/lib/policy/decision"
|
||||||
|
|
||||||
|
export function allow(): PolicyDecision {
|
||||||
|
return { ok: true }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function deny(reasonCode: ReasonCode, message?: string): PolicyDecision {
|
||||||
|
return { ok: false, reasonCode, message }
|
||||||
|
}
|
||||||
|
|
||||||
|
export function requireAuth(actor: Actor | null | undefined): PolicyDecision {
|
||||||
|
if (!actor?.userId) {
|
||||||
|
return deny("AUTH_REQUIRED", "请先登录")
|
||||||
|
}
|
||||||
|
|
||||||
|
return allow()
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
export type ReasonCode =
|
||||||
|
| "AUTH_REQUIRED"
|
||||||
|
| "NOT_FOUND"
|
||||||
|
| "NOT_PARTICIPANT"
|
||||||
|
| "ROLE_FORBIDDEN"
|
||||||
|
| "INVALID_STATUS"
|
||||||
|
| "ALREADY_DONE"
|
||||||
|
| "DISPUTE_LOCKED"
|
||||||
|
| "PAYMENT_FAILED"
|
||||||
|
| "IDEMPOTENT_NOOP"
|
||||||
|
| "VALIDATION_FAILED"
|
||||||
|
|
||||||
|
export interface PolicyDecision {
|
||||||
|
ok: boolean
|
||||||
|
reasonCode?: ReasonCode
|
||||||
|
message?: string
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user