web-production-saas-starter/next_b2b_starter/lib/auth/permissions.ts
2025-12-16 18:54:41 +04:00

71 lines
2 KiB
TypeScript

/**
* Permission System
* Based on Stytch RBAC - permissions are computed by backend
* Frontend receives expanded permissions array from /auth/profile/me
*/
// Permission constants (actual Stytch RBAC permissions only)
export const PERMISSIONS = {
// Resource Management
RESOURCE_VIEW: "resource:view",
RESOURCE_CREATE: "resource:create",
RESOURCE_EDIT: "resource:edit",
RESOURCE_DELETE: "resource:delete",
RESOURCE_APPROVE: "resource:approve",
// Organization Management
ORG_VIEW: "org:view",
ORG_MANAGE: "org:manage",
// Invoice Management
INVOICE_VIEW: "invoice:view",
INVOICE_CREATE: "invoice:create",
INVOICE_UPLOAD: "invoice:upload",
INVOICE_DELETE: "invoice:delete",
// Approvals
APPROVALS_VIEW: "approvals:view",
APPROVALS_APPROVE: "approvals:approve",
// Duplicates
DUPLICATES_VIEW: "duplicates:view",
DUPLICATES_RESOLVE: "duplicates:resolve",
// Payment Optimization
PAYMENT_OPTIMIZATION_SCHEDULE: "payment:schedule",
PAYMENT_OPTIMIZATION_EXPORT: "payment:export",
PAYMENT_OPTIMIZATION_EXECUTE: "payment:execute",
// Audit
AUDIT_VIEW: "audit:view",
} as const;
export type Permission = (typeof PERMISSIONS)[keyof typeof PERMISSIONS];
/**
* Permission resource and action groups for easier filtering
*/
export const PERMISSION_GROUPS = {
RESOURCE: [
PERMISSIONS.RESOURCE_VIEW,
PERMISSIONS.RESOURCE_CREATE,
PERMISSIONS.RESOURCE_EDIT,
PERMISSIONS.RESOURCE_DELETE,
PERMISSIONS.RESOURCE_APPROVE,
],
ORGANIZATION: [PERMISSIONS.ORG_VIEW, PERMISSIONS.ORG_MANAGE],
INVOICES: [
PERMISSIONS.INVOICE_VIEW,
PERMISSIONS.INVOICE_CREATE,
PERMISSIONS.INVOICE_UPLOAD,
PERMISSIONS.INVOICE_DELETE,
],
APPROVALS: [PERMISSIONS.APPROVALS_VIEW, PERMISSIONS.APPROVALS_APPROVE],
DUPLICATES: [PERMISSIONS.DUPLICATES_VIEW, PERMISSIONS.DUPLICATES_RESOLVE],
PAYMENTS: [
PERMISSIONS.PAYMENT_OPTIMIZATION_SCHEDULE,
PERMISSIONS.PAYMENT_OPTIMIZATION_EXPORT,
PERMISSIONS.PAYMENT_OPTIMIZATION_EXECUTE,
],
AUDIT: [PERMISSIONS.AUDIT_VIEW],
} as const;