lthn.io/app/Core/Front/Admin/Concerns/HasMenuPermissions.php
Claude 41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00

96 lines
2.8 KiB
PHP

<?php
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
declare(strict_types=1);
namespace Core\Front\Admin\Concerns;
/**
* Provides default permission handling for AdminMenuProvider implementations.
*
* Include this trait in classes that implement AdminMenuProvider to get
* sensible default behaviour for permission checks. Override methods
* as needed for custom permission logic.
*/
trait HasMenuPermissions
{
/**
* Get the permissions required to view any menu items from this provider.
*
* Override this method to specify required permissions.
*
* @return array<string>
*/
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;
}
}