'array', 'is_system' => 'boolean', ]; public function getPermissionsListAttribute(): array { return $this->permissions ?? []; } public function scopeNotSystem($query) { return $query->where('is_system', false); } /** * The role a user linked to a new admin profile gets: the platform setting * admin_settings.default_admin_role, 'administrator' when it is not set. */ public static function defaultName(): string { return (string) (timebank_config('admin_settings.default_admin_role') ?: 'administrator'); } /** * Give a user this role on one admin profile: the scoped Spatie role Admin\{adminId}\{name}, created * when missing and synced with this definition's permissions. */ public function assignScopedTo(User $user, int $adminId): Role { $role = Role::findOrCreate("Admin\\{$adminId}\\{$this->name}", 'web'); $role->syncPermissions($this->permissions ?? []); if (!$user->hasRole($role)) { $user->assignRole($role); } return $role; } }