feat: enhance admin role management and reconciliation features

- Updated AGENTS.md to clarify site admin roles and their associated permissions.
- Refactored reconciliation controllers to include admin user validation and improved access control based on admin roles.
- Enhanced AdminReconcileJobService to support player-specific reconciliation and site-based job creation.
- Removed deprecated rebate commission report functionality from the API and related services.
- Improved dashboard overview builders to accommodate new site operator roles and their specific functionalities.
This commit is contained in:
2026-06-16 16:04:01 +08:00
parent 3a59cc3f42
commit 4e370a79dc
35 changed files with 1230 additions and 180 deletions

View File

@@ -0,0 +1,62 @@
<?php
namespace App\Support;
use App\Models\AdminUser;
use Illuminate\Support\Facades\DB;
/** 接入站点平台账号内置角色(绑定 admin_user_site_roles无代理节点。 */
final class SiteOperatorRoles
{
public const SLUG_SITE_ADMIN = 'site_admin';
public const SLUG_SITE_FINANCE = 'site_finance';
public const SLUG_SITE_CS = 'site_cs';
/** @return list<string> */
public static function slugs(): array
{
return [
self::SLUG_SITE_ADMIN,
self::SLUG_SITE_FINANCE,
self::SLUG_SITE_CS,
];
}
public static function isSiteOperatorSlug(string $slug): bool
{
return in_array($slug, self::slugs(), true);
}
public static function userHasSiteOperatorRole(AdminUser $user): bool
{
if ($user->isSuperAdmin() || $user->hasPrimaryAgentBinding()) {
return false;
}
return self::primarySiteOperatorSlug($user) !== null;
}
public static function userHasSiteAdminRole(AdminUser $user): bool
{
return self::primarySiteOperatorSlug($user) === self::SLUG_SITE_ADMIN;
}
public static function primarySiteOperatorSlug(AdminUser $user): ?string
{
if ($user->isSuperAdmin() || $user->hasPrimaryAgentBinding()) {
return null;
}
$slug = DB::table('admin_user_site_roles as usr')
->join('admin_roles as r', 'r.id', '=', 'usr.role_id')
->where('usr.admin_user_id', $user->id)
->whereIn('r.slug', self::slugs())
->orderBy('usr.site_id')
->orderBy('r.sort_order')
->value('r.slug');
return is_string($slug) && $slug !== '' ? $slug : null;
}
}