@php
$menusDisponiveis = [
'dashboard' => [
'label' => 'Dashboard',
'icon' => 'bi-speedometer2',
'description' => 'Painel principal do sistema'
],
'clientes' => [
'label' => 'Clientes',
'icon' => 'bi-people',
'description' => 'Cadastro e gestão de clientes'
],
'fornecedores' => [
'label' => 'Fornecedores',
'icon' => 'bi-truck',
'description' => 'Cadastro e gestão de fornecedores'
],
'servicos' => [
'label' => 'Serviços',
'icon' => 'bi-tools',
'description' => 'Catálogo de serviços oferecidos'
],
'orcamentos' => [
'label' => 'Orçamentos',
'icon' => 'bi-file-earmark-text',
'description' => 'Criação e gestão de orçamentos'
],
'vendas' => [
'label' => 'Vendas',
'icon' => 'bi-cart-check',
'description' => 'Processamento e controle de vendas'
],
'financeiro' => [
'label' => 'Financeiro',
'icon' => 'bi-currency-dollar',
'description' => 'Relatório financeiro do sistema'
],
'usuarios' => [
'label' => 'Usuários',
'icon' => 'bi-person',
'description' => 'Usuários do sistema'
],
'grupos' => [
'label' => 'Grupos',
'icon' => 'bi-people',
'description' => 'Grupos de usuários do sistema'
]
];
// Filtrar apenas os menus que o grupo do usuário tem acesso
$menusDoGrupo = [];
if ($user->group && $user->group->menu_access && is_array($user->group->menu_access)) {
foreach ($user->group->menu_access as $menu) {
$menuKey = is_array($menu) ? (isset($menu['nome']) ? strtolower($menu['nome']) : (isset($menu['id']) ? $menu['id'] : '')) : $menu;
if (is_numeric($menuKey)) {
$reverseMap = [1 => 'dashboard', 2 => 'clientes', 3 => 'fornecedores', 4 => 'servicos', 5 => 'orcamentos', 6 => 'vendas', 7 => 'financeiro', 8 => 'usuarios', 9 => 'grupos'];
$menuKey = $reverseMap[$menuKey] ?? '';
}
if ($menuKey === 'serviços') $menuKey = 'servicos';
if ($menuKey === 'orçamentos') $menuKey = 'orcamentos';
if ($menuKey === 'usuários') $menuKey = 'usuarios';
$menuKey = str_replace(['ç', 'ã', 'õ', 'á', 'à', 'â', 'é', 'ê', 'í', 'ó', 'ô', 'ú'], ['c', 'a', 'o', 'a', 'a', 'a', 'e', 'e', 'i', 'o', 'o', 'u'], $menuKey);
$menuKey = preg_replace('/[^a-z0-9]/', '', $menuKey);
// Dashboard não aparece nas permissões específicas
if ($menuKey === 'dashboard') continue;
if (is_string($menuKey) && !empty($menuKey) && isset($menusDisponiveis[$menuKey])) {
$menusDoGrupo[$menuKey] = $menusDisponiveis[$menuKey];
}
}
}
$acoes = ['listar', 'visualizar', 'criar', 'editar', 'excluir'];
// Processar permissões do usuário - converter formato novo para antigo para compatibilidade
$userPermissions = [];
if ($user->permissions && is_array($user->permissions)) {
foreach ($user->permissions as $permission) {
if (is_array($permission) && isset($permission['id']) && isset($permission['permissions'])) {
// Formato novo: converter ID para chave
$reverseMap = [1 => 'dashboard', 2 => 'clientes', 3 => 'fornecedores', 4 => 'servicos', 5 => 'orcamentos', 6 => 'vendas', 7 => 'financeiro', 8 => 'usuarios', 9 => 'grupos'];
$menuKey = $reverseMap[$permission['id']] ?? '';
if ($menuKey) {
$userPermissions[$menuKey] = $permission['permissions'];
}
} elseif (is_array($permission) && isset($permission['nome']) && isset($permission['permissions'])) {
// Formato novo: converter nome para chave
$menuNome = strtolower($permission['nome']);
$menuNome = str_replace(['ç', 'ã', 'õ', 'á', 'à', 'â', 'é', 'ê', 'í', 'ó', 'ô', 'ú'], ['c', 'a', 'o', 'a', 'a', 'a', 'e', 'e', 'i', 'o', 'o', 'u'], $menuNome);
$menuKey = preg_replace('/[^a-z0-9]/', '', $menuNome);
if ($menuKey) {
$userPermissions[$menuKey] = $permission['permissions'];
}
}
}
}
@endphp
Permissões específicas por módulo: Configure as ações específicas que este usuário pode realizar em cada módulo do sistema.
@if(count($menusDoGrupo) > 0)
@foreach($menusDoGrupo as $menuKey => $menuInfo)
@php
// DEBUG: verificar se financeiro está nos menus do grupo
if ($menuKey === 'financeiro') {
echo "";
}
@endphp
@foreach($acoes as $acao)
@php
$hasPermission = false;
if (isset($userPermissions[$menuKey]) && is_array($userPermissions[$menuKey])) {
$hasPermission = in_array($acao, $userPermissions[$menuKey]);
}
@endphp
@endforeach
@endforeach
@else
O grupo deste usuário não possui menus configurados para exibir permissões específicas.
@endif
@if(empty($userPermissions) && count($menusDoGrupo) > 0)
Nenhuma permissão específica definida para este usuário. O usuário herda as permissões do grupo.
@endif