singleloginsystem/app/Helpers/AppPermission.php
= d7c2491fed Refactor: consolidate and replace permission enums for streamlined access management
- Replaced `AccessManager`, `Apps`, and `Settings` enums with modular enums like `RoleAndAppsPermissionEnum`, `AppPermissionEnum`, etc.
- Updated route, view, Livewire components, and tests to use new modular enums.
- Enhanced `DefaultRoleWithPermissionSeeder` and `PermissionSeeder` with updated enums.
- Added README in the Enums/Permissions directory to explain usage and naming conventions.
- Refactored dashboard sidebar and route definitions for better enum-based permission handling.
- Improved test coverage to validate new permission enums functionality.
2026-05-25 06:18:09 +00:00

69 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Helpers;
use App\Data\ConnectedApp\ConnectedAppData;
use App\Enums\ConnectedAppPermissonEnum;
class AppPermission
{
/**
* The standard scope name for connected app permissions.
*/
public const SCOPE = 'app';
/**
* Generates the standard permission string following the scope:resource:action convention.
* Format: app:{slug}:{action}
*
* @param ConnectedAppPermissonEnum $permission The action to perform (e.g., 'use')
* @param string|ConnectedAppData $app The connected app object or its slug
*
* @return string The formatted permission name
*/
public static function name(ConnectedAppPermissonEnum $permission, string|ConnectedAppData $app): string
{
$slug = is_string($app) ? $app : $app->slug;
return sprintf('%s:%s:%s', self::SCOPE, $slug, $permission->value);
}
/**
* Parses the permission string to extract the ConnectedAppPermissonEnum type (action).
*
* @param string $permissionName The constructed permission name
*
* @return ?ConnectedAppPermissonEnum The matching enum or null
*/
public static function type(string $permissionName): ?ConnectedAppPermissonEnum
{
$parts = explode(':', $permissionName);
if (3 === count($parts) && self::SCOPE === $parts[0]) {
return ConnectedAppPermissonEnum::tryFrom($parts[2]);
}
return null;
}
/**
* Parses the permission string to extract the connected app slug (resource).
*
* @param string $permissionName The constructed permission name
*
* @return ?string The app slug or null
*/
public static function slug(string $permissionName): ?string
{
$parts = explode(':', $permissionName);
if (3 === count($parts) && self::SCOPE === $parts[0]) {
return $parts[1];
}
return null;
}
}