*/ public function menuPermissions(): array { return []; } /** * Check if the user has permission to view menu items from this provider. * * By default, checks that the user has all permissions returned by * menuPermissions(). Override for custom logic. * * @param object|null $user The authenticated user (User model instance) * @param object|null $workspace The current workspace context (Workspace model instance) */ public function canViewMenu(?object $user, ?object $workspace): bool { // No user means no permission (unless we have no requirements) $permissions = $this->menuPermissions(); if (empty($permissions)) { return true; } if ($user === null) { return false; } // Check each required permission foreach ($permissions as $permission) { if (! $this->userHasPermission($user, $permission, $workspace)) { return false; } } return true; } /** * Check if a user has a specific permission. * * Override this method to customise how permission checks are performed. * By default, uses Laravel's Gate/Authorization system. * * @param object $user User model instance * @param object|null $workspace Workspace model instance */ protected function userHasPermission(object $user, string $permission, ?object $workspace): bool { // Check using Laravel's authorization if (method_exists($user, 'can')) { return $user->can($permission, $workspace); } // Fallback: check for hasPermission method (common in permission packages) if (method_exists($user, 'hasPermission')) { return $user->hasPermission($permission); } // Fallback: check for hasPermissionTo method (Spatie Permission) if (method_exists($user, 'hasPermissionTo')) { return $user->hasPermissionTo($permission); } // No permission system found, allow by default return true; } }