Role::with('permissions')->orderBy('name')->get(),
'permissions' => Permission::with('roles')->orderBy('name')->get(),
'allPermissions' => Permission::orderBy('name')->get(),
'selectedRole' => $this->selectedRoleId ? Role::find($this->selectedRoleId) : null,
];
}
public function switchTab(string $tab): void
{
\Log::info('Switching tab to: ' . $tab);
$this->activeTab = $tab;
\Log::info('Active tab: ' . $this->activeTab);
}
public function openEditModal(int $roleId): void
{
$role = Role::with('permissions')->findOrFail($roleId);
$this->selectedRoleId = $roleId;
$this->roleName = $role->name;
$this->roleDisplayName = $role->display_name ?? $role->name;
$this->roleIcon = $role->icon ?? 'shield-check';
$this->roleColor = $role->color ?? 'zinc';
$this->rolePermissions = $role->permissions->pluck('name')->toArray();
$this->roleIcon = $role->icon ?? 'shield-check';
$this->showEditModal = true;
}
public function saveRole(): void
{
if (!$this->selectedRoleId) {
return;
}
$this->validate([
'roleName' => 'required|string|max:255',
'roleColor' => 'required|string|max:50',
]);
$role = Role::findOrFail($this->selectedRoleId);
$role->update([
'name' => $this->roleName,
'display_name' => $this->roleDisplayName,
'icon' => $this->roleIcon,
'color' => $this->roleColor,
]);
$role->syncPermissions($this->rolePermissions);
$this->showEditModal = false;
$this->reset(['selectedRoleId', 'roleName', 'roleDisplayName', 'roleIcon', 'roleColor', 'rolePermissions']);
session()->flash('message', __('Role updated successfully!'));
}
public function closeEditModal(): void
{
$this->showEditModal = false;
$this->reset(['selectedRoleId', 'roleName', 'roleDisplayName', 'roleIcon', 'roleColor', 'rolePermissions']);
}
}; ?>
{{-- Header --}}
{{ __('Permissions & Roles Management') }}
{{ __('Manage roles and permissions for your application') }}
{{ __('Create Role') }}
{{ __('Create Permission') }}
{{-- Tabs --}}
{{ __('Roles Overview') }}
{{ __('Permissions Overview') }}
{{-- Roles Tab Content --}}
@if($activeTab === 'roles')
{{ __('Role') }}
{{ __('Permissions') }}
{{ __('Count') }}
{{ __('Actions') }}
@forelse($roles as $role)
@php
$colorClasses = match($role->color ?? 'zinc') {
'red' => 'bg-red-100 text-red-600 dark:bg-red-900/20 dark:text-red-400',
'accent' => 'bg-accent-100 text-accent-600 dark:bg-accent-900/20 dark:text-accent-400',
'blue' => 'bg-blue-100 text-blue-600 dark:bg-blue-900/20 dark:text-blue-400',
'lime' => 'bg-lime-100 text-lime-600 dark:bg-lime-900/20 dark:text-lime-400',
'teal' => 'bg-teal-100 text-teal-600 dark:bg-teal-900/20 dark:text-teal-400',
'orange' => 'bg-orange-100 text-orange-600 dark:bg-orange-900/20 dark:text-orange-400',
'purple' => 'bg-purple-100 text-purple-600 dark:bg-purple-900/20 dark:text-purple-400',
'indigo' => 'bg-indigo-100 text-indigo-600 dark:bg-indigo-900/20 dark:text-indigo-400',
'pink' => 'bg-pink-100 text-pink-600 dark:bg-pink-900/20 dark:text-pink-400',
'green' => 'bg-green-100 text-green-600 dark:bg-green-900/20 dark:text-green-400',
'yellow' => 'bg-yellow-100 text-yellow-600 dark:bg-yellow-900/20 dark:text-yellow-400',
default => 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400',
};
@endphp
@if($role->icon)
@svg('heroicon-o-'.$role->icon, 'w-5 h-5')
@else
@svg('heroicon-o-shield-check', 'w-5 h-5')
@endif
{{ $role->display_name ?? $role->name }}
{{ $role->name }} • {{ __('Guard:') }} {{ $role->guard_name }}
@if($role->name === 'Super-Admin')
{{ __('All Permissions') }}
@elseif($role->permissions->isEmpty())
{{ __('No permissions') }}
@else
@foreach($role->permissions->take(5) as $permission)
{{ $permission->name }}
@endforeach
@if($role->permissions->count() > 5)
+{{ $role->permissions->count() - 5 }} {{ __('more') }}
@endif
@endif
@if($role->name === 'Super-Admin')
∞
@else
{{ $role->permissions->count() }}
@endif
@empty
{{ __('No roles found') }}
{{ __('Get started by creating a new role.') }}
@endforelse
{{-- Role Statistics --}}
{{ __('Total Roles') }}
{{ $roles->count() }}
{{ __('Total Permissions') }}
{{ $permissions->count() }}
{{ __('Avg. Permissions/Role') }}
{{ $roles->count() > 0 ? number_format($roles->sum(fn($r) => $r->permissions->count()) / $roles->count(), 1) : 0 }}
@endif
{{-- Permissions Tab Content --}}
@if($activeTab === 'permissions')
{{ __('Permission') }}
{{ __('Assigned to Roles') }}
{{ __('Role Count') }}
{{ __('Actions') }}
@php
$groupedPermissions = $permissions->groupBy(function($permission) {
return explode(' ', $permission->name)[1] ?? 'other';
});
@endphp
@forelse($groupedPermissions as $group => $groupPermissions)
{{-- Group Header --}}
{{ ucfirst($group) }} {{ __('Permissions') }} ({{ $groupPermissions->count() }})
{{-- Group Permissions --}}
@foreach($groupPermissions as $permission)
{{ $permission->name }}
{{ __('Guard:') }} {{ $permission->guard_name }}
@if($permission->roles->isEmpty())
{{ __('Not assigned') }}
@else
@foreach($permission->roles as $role)
{{ $role->name }}
@endforeach
@endif
{{ $permission->roles->count() }}
@endforeach
@empty
{{ __('No permissions found') }}
{{ __('Get started by creating a new permission.') }}
@endforelse
@endif
{{-- Edit Role Modal --}}
{{-- Success Message --}}
@if (session()->has('message'))
{{ session('message') }}
@endif