refactor: update permission management and role structure

- Enhanced the permission management system by introducing a new base permissions structure, allowing for better organization and clarity.
- Updated the role creation process to normalize role levels, limiting them to two levels: 0 (maximum access) and 1 (administrative access).
- Improved the UI for permission displays, ensuring users are informed when no permissions are available.
- Added alerts and messages to guide users in creating permissions when none exist.
- Streamlined backend queries for permissions and roles to improve performance and maintainability.
This commit is contained in:
2025-11-14 15:12:54 -03:00
parent 5b2c682870
commit 3c371bc35c
5 changed files with 1232 additions and 1006 deletions

View File

@@ -543,7 +543,7 @@
</div>
</div>
</div>
{:else if catalogoQuery.data}
{:else if catalogoQuery.data && catalogoQuery.data.length > 0}
<div class="space-y-2">
{#each catalogoQuery.data as item (item.recurso)}
{@const recursoExpandido = isRecursoExpandido(roleId, item.recurso)}
@@ -576,28 +576,40 @@
<!-- Lista de ações (visível quando expandido) -->
{#if recursoExpandido}
<div class="bg-base-100 border-base-300 border-t px-4 py-3">
<div class="space-y-2">
{#each ['ver', 'listar', 'criar', 'editar', 'excluir'] as acao (acao)}
<label
class="hover:bg-base-200 flex cursor-pointer items-center gap-3 rounded p-2 transition-colors"
>
<input
type="checkbox"
class="checkbox checkbox-primary"
checked={isConcedida(roleId, item.recurso, acao)}
disabled={salvando}
onchange={(e) =>
toggleAcao(roleId, item.recurso, acao, e.currentTarget.checked)}
/>
<span class="flex-1 font-medium capitalize">{acao}</span>
</label>
{/each}
</div>
{#if item.acoes.length === 0}
<p class="text-base-content/60 text-sm">
Nenhuma permissão cadastrada para este recurso.
</p>
{:else}
<div class="space-y-2">
{#each item.acoes as acao (acao)}
<label
class="hover:bg-base-200 flex cursor-pointer items-center gap-3 rounded p-2 transition-colors"
>
<input
type="checkbox"
class="checkbox checkbox-primary"
checked={isConcedida(roleId, item.recurso, acao)}
disabled={salvando}
onchange={(e) =>
toggleAcao(roleId, item.recurso, acao, e.currentTarget.checked)}
/>
<span class="flex-1 font-medium">{acao}</span>
</label>
{/each}
</div>
{/if}
</div>
{/if}
</div>
{/each}
</div>
{:else}
<div class="alert alert-info mt-4">
<span class="font-semibold">
Nenhuma permissão cadastrada ainda. Use o botão Criar permissão para começar.
</span>
</div>
{/if}
</div>
</div>