permissionManagerService = $permissionManagerService; } public function mount(): void { $this->headers = TableHeader::collect([ new TableHeader(key: 'name', label: 'Role'), new TableHeader(key: 'priority', label: 'Priority'), new TableHeader(key: 'permissions', label: 'Permissions'), new TableHeader(key: 'users', label: 'Added Users'), ], DataCollection::class); } /** * @return PaginatedDataCollection */ #[Computed] public function getRoles(): PaginatedDataCollection { return $this->permissionManagerService->getRolesWithPermissionsAndUsers(); } public function openEditModal(int $roleId): void { $this->authorize(PermissionPermissionEnum::Update->value); $this->attempt( action: function () use ($roleId): void { $role = $this->permissionManagerService->getRoleForEditing($roleId); $this->roleId = $role->id; $this->roleName = $role->name; $this->nonAppPermissions = $this->permissionManagerService->getNonAppPermissions()->toCollection() ->groupBy('resource') ->map(fn($group) => $group->toArray()) ->toArray(); $this->selectedPermissionIds = $role->permissions() ->pluck('id') ->map(fn($id) => (int) $id) ->toArray(); $this->showEditModal = true; }, showSuccess: false, ); } public function savePermissions(): void { $this->authorize(PermissionPermissionEnum::Update->value); $this->attempt( action: function (): void { $role = $this->permissionManagerService->getRoleForEditing($this->roleId); $existingAppPermissions = $role->permissions() ->get() ->filter(fn($p) => AppPermission::type($p->name) !== null) ->pluck('name') ->toArray(); $selectedNames = Permission::query() ->whereIn('id', $this->selectedPermissionIds) ->pluck('name') ->toArray(); $finalNames = array_values(array_unique(array_merge($existingAppPermissions, $selectedNames))); $role->syncPermissions($finalNames); $this->showEditModal = false; unset($this->getRoles); }, successMessage: 'Permissions updated successfully!', ); } }; ?>
@scope('cell_name', $row) {{ $row->name }} @endscope @scope('cell_priority', $row) {{ $row->priority }} @endscope @scope('cell_permissions', $row)
@if($row->permissions && $row->permissions->count()) @foreach($row->permissions as $permission) @if(AppPermission::type($permission->name) === null) @else @endif @endforeach @else No permissions @endif
@endscope @scope('cell_users', $row)
@if($row->users && $row->users->count()) @foreach($row->users as $user) @endforeach @else No users @endif
@endscope @scope('actions', $row) @php $userPriority = auth()->user()?->roles()->min('priority') ?? 999999; $isManageable = $row->priority > $userPriority; @endphp @if($isManageable)
@can(PermissionPermissionEnum::Update->value) @endcan
@endif @endscope
@foreach ($nonAppPermissions as $resource => $permissions)

{{ ucwords(str_replace('-', ' ', $resource)) }}

@foreach ($permissions as $permission) @endforeach
@endforeach
Cancel Save