Files
lotteryLaravel/app/Support/AdminPermissionLanguage.php
kang a60ce8caad refactor: 优化 DrawHallSnapshotBuilder 和权限管理逻辑
- 在 DrawHallSnapshotBuilder 中简化数据获取逻辑,仅保留必要字段,更新状态表示方式。
- 在 AdminAuthorizationRegistry 中整合接入站点权限定义,提升权限管理的灵活性与可维护性。
- 更新调度任务配置,确保任务在单一服务器上运行,避免重叠执行,提高系统稳定性。
- 增强测试用例,确保新逻辑的正确性与稳定性。
2026-05-27 16:51:08 +08:00

127 lines
4.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Support;
/**
* “权限语言”映射层:
* - 把 UI 可理解的词汇(查看/可管理/可审核/导出/特权)映射到系统真实运行时校验的 `prd.*` slug
* - 以及进一步映射到运行时 action code如 `integration.site.view`
*
* 当前仅把 integration-sites 作为首个落地示例,其它页面建议按同样结构逐步接入。
*/
final class AdminPermissionLanguage
{
private static function cfg(): array
{
$cfg = config('admin_permission_language');
if (is_array($cfg)) {
return $cfg;
}
// 若存在 config cache 且未刷新新加配置文件未生效config() 可能拿不到该 key。
// 兜底 require 该 PHP 配置文件,避免 Registry 产出空 slug / 空 permission_codes。
$path = base_path('config/admin_permission_language.php');
if (is_string($path) && file_exists($path)) {
/** @var mixed $loaded */
$loaded = require $path;
return is_array($loaded) ? $loaded : [];
}
return [];
}
private static function categories(): array
{
return self::cfg()['categories'] ?? [];
}
private static function pages(): array
{
return self::cfg()['pages'] ?? [];
}
public static function pageLabel(string $pageKey): string
{
$pages = self::pages();
$page = $pages[$pageKey] ?? null;
$label = $page['label'] ?? '';
return is_string($label) ? $label : '';
}
public static function bundleCategoryKey(string $pageKey, string $bundleKey): string
{
$pages = self::pages();
$page = $pages[$pageKey] ?? [];
$bundle = $page['bundles'][$bundleKey] ?? [];
$category = is_array($bundle) ? ($bundle['category'] ?? '') : '';
return is_string($category) ? $category : '';
}
public static function bundleLabel(string $pageKey, string $bundleKey): string
{
$categoryKey = self::bundleCategoryKey($pageKey, $bundleKey);
$categories = self::categories();
$category = $categories[$categoryKey] ?? null;
$label = $category['label'] ?? '';
return is_string($label) ? $label : '';
}
public static function prdSlug(string $pageKey, string $bundleKey): string
{
$pages = self::pages();
$page = $pages[$pageKey] ?? [];
$bundle = $page['bundles'][$bundleKey] ?? [];
$slug = is_array($bundle) ? ($bundle['prd_slug'] ?? '') : '';
return is_string($slug) ? $slug : '';
}
/** @return list<string> */
public static function permissionCodes(string $pageKey, string $bundleKey): array
{
$pages = self::pages();
$page = $pages[$pageKey] ?? [];
$bundle = $page['bundles'][$bundleKey] ?? [];
$codes = is_array($bundle) ? ($bundle['permission_codes'] ?? []) : [];
return is_array($codes) ? array_values(array_filter($codes, static fn ($v): bool => is_string($v) && $v !== '')) : [];
}
public static function prdName(string $pageKey, string $bundleKey): string
{
return sprintf('%s·%s', self::pageLabel($pageKey), self::bundleLabel($pageKey, $bundleKey));
}
/** @return list<string> */
public static function requiredBundleKeys(string $pageKey): array
{
$pages = self::pages();
$page = $pages[$pageKey] ?? [];
$required = $page['required_bundles'] ?? [];
if (! is_array($required)) {
return [];
}
return array_values(array_filter($required, static fn ($v): bool => is_string($v) && $v !== ''));
}
/** @return list<string> */
public static function requiredAnyPrdSlugs(string $pageKey): array
{
$bundleKeys = self::requiredBundleKeys($pageKey);
if ($bundleKeys === []) {
return [];
}
$slugs = [];
foreach ($bundleKeys as $bundleKey) {
$slug = self::prdSlug($pageKey, $bundleKey);
if (is_string($slug) && $slug !== '') {
$slugs[] = $slug;
}
}
return array_values(array_unique($slugs));
}
}