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 --}}
{{ __('Edit Role') }} @if($selectedRole) {{ __('Editing role') }}: {{ $selectedRole->name }} @endif
{{ __('Role Name') }} @error('roleName') {{ $message }} @enderror {{ __('Role Icon') }} @error('roleIcon') {{ $message }} @enderror {{ __('Role Display Name') }} @error('roleDisplayName') {{ $message }} @enderror {{ __('Color') }} {{ __('Select a color for this role') }} {{ __('Red') }} {{ __('Orange') }} {{ __('Lime') }} {{ __('Teal') }} {{ __('Indigo') }} {{ __('Purple') }} {{ __('Pink') }} {{ __('Accent (Cyan)') }} {{ __('Yellow') }} {{ __('Green') }} {{ __('Gray') }} @error('roleColor') {{ $message }} @enderror @if($roleColor)
{{ __('Preview:') }} {{ $roleName ?: __('Role Name') }}
@endif {{ __('Permissions') }} {{ __('Select permissions for this role') }}
@php $groupedPerms = $allPermissions->groupBy(function($permission) { return explode(' ', $permission->name)[1] ?? 'other'; }); @endphp @foreach($groupedPerms as $group => $perms)
{{ ucfirst($group) }}
@foreach($perms as $permission) @endforeach
@endforeach
@if(!empty($rolePermissions))
{{ __('Selected Permissions:') }} ({{ count($rolePermissions) }})
@foreach($rolePermissions as $permName) {{ $permName }} @endforeach
@endif
{{ __('Cancel') }} {{ __('Save Role') }}
{{-- Success Message --}} @if (session()->has('message')) {{ session('message') }} @endif