diff --git a/apps/web/src/app.css b/apps/web/src/app.css index 4c1b0c2..5e25b7b 100644 --- a/apps/web/src/app.css +++ b/apps/web/src/app.css @@ -1,2 +1,20 @@ @import "tailwindcss"; @plugin "daisyui"; + +/* Estilo padrão dos botões - mesmo estilo do sidebar */ +.btn-standard { + @apply font-medium flex items-center justify-center gap-2 text-center p-3 rounded-xl border border-base-300 bg-base-100 hover:bg-primary/60 active:bg-primary text-base-content hover:text-white active:text-white transition-colors; +} + +/* Sobrescrever estilos DaisyUI para seguir o padrão */ +.btn-primary { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-base-300 bg-base-100 hover:bg-primary/60 active:bg-primary text-base-content hover:text-white active:text-white transition-colors; +} + +.btn-ghost { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-base-300 bg-base-100 hover:bg-base-200 active:bg-base-300 text-base-content transition-colors; +} + +.btn-error { + @apply font-medium flex items-center justify-center gap-2 text-center px-4 py-2 rounded-xl border border-error bg-base-100 hover:bg-error/60 active:bg-error text-error hover:text-white active:text-white transition-colors; +} \ No newline at end of file diff --git a/apps/web/src/hooks.server.ts b/apps/web/src/hooks.server.ts new file mode 100644 index 0000000..de58268 --- /dev/null +++ b/apps/web/src/hooks.server.ts @@ -0,0 +1,9 @@ +import type { Handle } from "@sveltejs/kit"; + +// Middleware desabilitado - proteção de rotas feita no lado do cliente +// para compatibilidade com localStorage do authStore + +export const handle: Handle = async ({ event, resolve }) => { + return resolve(event); +}; + diff --git a/apps/web/src/lib/components/MenuProtection.svelte b/apps/web/src/lib/components/MenuProtection.svelte new file mode 100644 index 0000000..bc2159c --- /dev/null +++ b/apps/web/src/lib/components/MenuProtection.svelte @@ -0,0 +1,154 @@ + + +{#if verificando} +
+
+ {#if motivoNegacao === "auth_required"} +
+ + + +
+

Acesso Restrito

+

+ Esta área requer autenticação.
+ Por favor, faça login para continuar. +

+ {:else} + +

Verificando permissões...

+ {/if} +
+
+{:else if temPermissao} + {@render children?.()} +{:else} +
+
+
+ + + +
+

Acesso Negado

+

Você não tem permissão para acessar esta página.

+ +
+
+{/if} + diff --git a/apps/web/src/lib/components/ProtectedRoute.svelte b/apps/web/src/lib/components/ProtectedRoute.svelte new file mode 100644 index 0000000..3162bf7 --- /dev/null +++ b/apps/web/src/lib/components/ProtectedRoute.svelte @@ -0,0 +1,74 @@ + + +{#if isChecking} +
+
+ +

Verificando permissões...

+
+
+{:else if hasAccess} + {@render children()} +{/if} + diff --git a/apps/web/src/lib/components/Sidebar.svelte b/apps/web/src/lib/components/Sidebar.svelte index b756b49..a995514 100644 --- a/apps/web/src/lib/components/Sidebar.svelte +++ b/apps/web/src/lib/components/Sidebar.svelte @@ -1,10 +1,17 @@ -