refactor: 优化 DrawHallSnapshotBuilder 和权限管理逻辑

- 在 DrawHallSnapshotBuilder 中简化数据获取逻辑,仅保留必要字段,更新状态表示方式。
- 在 AdminAuthorizationRegistry 中整合接入站点权限定义,提升权限管理的灵活性与可维护性。
- 更新调度任务配置,确保任务在单一服务器上运行,避免重叠执行,提高系统稳定性。
- 增强测试用例,确保新逻辑的正确性与稳定性。
This commit is contained in:
2026-05-27 16:51:08 +08:00
parent a10135d6ee
commit a60ce8caad
10 changed files with 434 additions and 32 deletions

View File

@@ -0,0 +1,126 @@
<?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));
}
}