Files
lotteryLaravel/app/Support/AdminPermissionBridge.php

68 lines
1.7 KiB
PHP

<?php
namespace App\Support;
final class AdminPermissionBridge
{
/** @return array<string, list<string>> */
public static function legacyMap(): array
{
/** @var array<string, list<string>> */
return config('admin_permissions.legacy_map', []);
}
/** @return list<string> */
public static function allLegacySlugs(): array
{
$keys = array_keys(self::legacyMap());
sort($keys);
return $keys;
}
/** @return list<string> */
public static function menuActionCodesForLegacy(string $legacySlug): array
{
return array_values(array_unique(self::legacyMap()[$legacySlug] ?? []));
}
/**
* 若管理员拥有的任意 menu_action.permission_code 落在某 `prd.*` 映射集合内,则视为拥有该 `prd.*`
*(与路由中间件「满足其一」及 Next 侧栏 `requiredAny` 语义一致)。
*
* @param list<string> $menuActionCodes
* @return list<string>
*/
public static function legacySlugsGrantedByMenuActionCodes(array $menuActionCodes): array
{
if ($menuActionCodes === []) {
return [];
}
$set = [];
foreach ($menuActionCodes as $code) {
if (is_string($code) && $code !== '') {
$set[$code] = true;
}
}
if ($set === []) {
return [];
}
$out = [];
foreach (self::legacyMap() as $legacySlug => $requiredCodes) {
foreach ($requiredCodes as $code) {
if (isset($set[$code])) {
$out[$legacySlug] = true;
break;
}
}
}
$keys = array_keys($out);
sort($keys);
return $keys;
}
}