/** * Helper para verificar permisos del usuario * Basado en el sistema de permisos RBAC del backend */ import { get } from 'svelte/store'; import { page } from '$app/stores'; export interface UserPermission { module: string; action: string; } /** * Verifica si el usuario tiene un permiso específico * @param module - El módulo (ej: 'invoices', 'pedimentos') * @param action - La acción (ej: 'create', 'update', 'delete', 'read') * @returns true si el usuario tiene el permiso, false si no */ export function hasPermission(module: string, action: string): boolean { // TODO: Implementar verificación real contra permisos del usuario // Por ahora retorna true para permitir desarrollo // En producción esto debe: // 1. Obtener los permisos del usuario desde el contexto/store // 2. Verificar si existe un permiso con module y action // 3. Retornar true/false basado en la verificación console.warn('hasPermission() no está implementado - retornando true por defecto'); return true; } /** * Verifica si el usuario tiene alguno de varios permisos * @param permissions - Array de permisos a verificar * @returns true si el usuario tiene al menos uno de los permisos */ export function hasAnyPermission(permissions: UserPermission[]): boolean { return permissions.some(p => hasPermission(p.module, p.action)); } /** * Verifica si el usuario tiene todos los permisos especificados * @param permissions - Array de permisos a verificar * @returns true si el usuario tiene todos los permisos */ export function hasAllPermissions(permissions: UserPermission[]): boolean { return permissions.every(p => hasPermission(p.module, p.action)); } /** * Guard para proteger rutas basado en permisos * Puede ser usado en +page.server.ts o +layout.server.ts * @param module - El módulo requerido * @param action - La acción requerida * @returns objeto con allowed (boolean) y redirect (string opcional) */ export function requirePermission(module: string, action: string): { allowed: boolean; redirect?: string; } { const allowed = hasPermission(module, action); if (!allowed) { return { allowed: false, redirect: '/dashboard?error=forbidden' }; } return { allowed: true }; }