Files
BarangaySystem/app/Support/TokenAbilities.php
2026-06-06 18:43:00 +08:00

101 lines
4.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Support;
class TokenAbilities
{
public const WILDCARD = '*';
/**
* Catalog of all valid abilities grouped for UI presentation.
* @return array<string, array<int, array{key: string, label: string}>>
*/
public static function catalog(): array
{
return [
'Identity' => self::group([
'users:read', 'users:write', 'users:delete', 'users:impersonate',
'chapters:read', 'chapters:write', 'chapters:delete',
'chapter-members:read', 'chapter-members:write', 'chapter-members:delete',
'announcements:read', 'announcements:write', 'announcements:delete',
]),
'Content' => self::group([
'pages:read', 'pages:write', 'pages:delete',
'landing-pages:read', 'landing-pages:write', 'landing-pages:delete',
'page-memory:read', 'page-memory:write',
]),
'Files' => self::group([
'files:read', 'files:upload', 'files:delete', 'files:publish',
]),
'System' => self::group([
'system-settings:read', 'system-settings:write',
'db-backups:read', 'db-backups:write', 'db-backups:restore',
'table-logs:read',
'global-transactions:read', 'global-transactions:write',
]),
'Accounting' => self::group([
'accounts:read', 'accounts:write', 'accounts:delete',
'account-transactions:read', 'account-transactions:write', 'account-transactions:void',
'member-ledgers:read', 'member-ledgers:write',
]),
'Cooperatives' => self::group([
'cooperatives:read', 'cooperatives:write', 'cooperatives:delete',
'cooperative-members:read', 'cooperative-members:write', 'cooperative-members:delete',
'cooperative-documents:read', 'cooperative-documents:write', 'cooperative-documents:delete',
'cooperative-resolutions:read', 'cooperative-resolutions:write', 'cooperative-resolutions:delete',
'cooperative-votes:read', 'cooperative-votes:write',
'main-organization:read', 'main-organization:write',
]),
'Market' => self::group([
'products:read', 'products:write', 'products:delete',
'product-transactions:read', 'product-transactions:write', 'product-transactions:void',
'stores:read', 'stores:write', 'stores:delete',
'store-managers:read', 'store-managers:write',
'customers:read', 'customers:write', 'customers:delete',
'farmers:read', 'farmers:write', 'farmers:delete',
'couriers:read', 'couriers:write',
'shipments:read', 'shipments:write',
'carts:read', 'carts:write',
]),
'POS' => self::group([
'pos-sessions:read', 'pos-sessions:write', 'pos-sessions:close',
'pos-transactions:read', 'pos-transactions:write', 'pos-transactions:void',
'pos-access-keys:read', 'pos-access-keys:write', 'pos-access-keys:delete',
]),
'Property' => self::group([
'properties:read', 'properties:write', 'properties:delete',
'referrals:read', 'referrals:write',
'referral-keys:read', 'referral-keys:write', 'referral-keys:delete',
]),
];
}
/** @return array<int, string> */
public static function all(): array
{
$out = [];
foreach (self::catalog() as $group) {
foreach ($group as $entry) {
$out[] = $entry['key'];
}
}
return $out;
}
public static function exists(string $ability): bool
{
return $ability === self::WILDCARD || in_array($ability, self::all(), true);
}
/**
* @param array<int, string> $keys
* @return array<int, array{key: string, label: string}>
*/
private static function group(array $keys): array
{
return array_map(static fn ($k) => ['key' => $k, 'label' => $k], $keys);
}
}