addMinutes(self::CACHE_DURATION_MINUTES), fn () => WebsitePermission::all()->pluck('min_rank', 'permission')->toArray()); $this->permissions = collect($data); } public function getOrDefault(string $permissionName, bool $default = false): bool { if ($this->permissions->isEmpty()) { $permission = WebsitePermission::where('permission', $permissionName)->first(); if (! $permission) { return $default; } return auth()->check() && auth()->user()->rank >= $permission->min_rank; } if (! $this->permissions->has($permissionName)) { return $default; } $requiredRank = (int) $this->permissions->get($permissionName); return auth()->check() && auth()->user()->rank >= $requiredRank; } public function all(): Collection { return $this->permissions; } public function flush(): void { Cache::forget(self::CACHE_KEY); } }