- 在 SyncAdminAuthorizationCommand 中新增对代理和抽奖菜单操作的同步功能,确保缺失的菜单操作行能够被创建。 - 更新多个控制器中的权限检查逻辑,使用 hasPermissionCode 替代原有的权限验证方式,提升权限管理的灵活性。 - 引入 ApiMessage 统一错误响应格式,确保在权限不足时返回一致的错误信息。 - 更新 AdminRole 和 AdminUser 模型,增强角色与用户的权限管理功能,支持更细粒度的权限控制。
121 lines
3.7 KiB
PHP
121 lines
3.7 KiB
PHP
<?php
|
||
|
||
namespace Database\Seeders;
|
||
|
||
use App\Models\AdminRole;
|
||
use App\Models\AdminUser;
|
||
use Illuminate\Database\Seeder;
|
||
use App\Support\AdminAgentPermissionMenuActionSync;
|
||
use App\Support\AdminDrawPermissionMenuActionSync;
|
||
use App\Support\AdminPermissionBridge;
|
||
|
||
/**
|
||
* 后台 RBAC:与 {@see AdminUser::ROLE_SUPER_ADMIN} 及 `config/admin_permissions.php` 对齐。
|
||
*
|
||
* 演示账号 **admin** / **123456**(仅限非 production)。
|
||
*/
|
||
final class AdminRbacAndUserSeeder extends Seeder
|
||
{
|
||
/** @param list<string> $legacySlugs */
|
||
private function syncRolePermissions(AdminRole $role, array $legacySlugs): void
|
||
{
|
||
$role->syncLegacyPermissionSlugs($legacySlugs);
|
||
}
|
||
|
||
/** @return list<string> */
|
||
private function allCatalogSlugs(): array
|
||
{
|
||
return AdminPermissionBridge::allLegacySlugs();
|
||
}
|
||
|
||
public function run(): void
|
||
{
|
||
AdminAgentPermissionMenuActionSync::syncMissing();
|
||
AdminDrawPermissionMenuActionSync::syncMissing();
|
||
|
||
$super = AdminRole::query()->updateOrCreate(
|
||
['slug' => AdminUser::ROLE_SUPER_ADMIN],
|
||
['code' => AdminUser::ROLE_SUPER_ADMIN, 'name' => '超级管理员'],
|
||
);
|
||
$this->syncRolePermissions($super, $this->allCatalogSlugs());
|
||
|
||
$risk = AdminRole::query()->updateOrCreate(
|
||
['slug' => 'risk_operator'],
|
||
['code' => 'risk_operator', 'name' => '风控运营员'],
|
||
);
|
||
$this->syncRolePermissions($risk, [
|
||
'prd.dashboard.view',
|
||
'prd.play_switch.manage',
|
||
'prd.odds.manage',
|
||
'prd.risk_cap.manage',
|
||
'prd.rebate.manage',
|
||
'prd.jackpot.manage',
|
||
'prd.draw_result.manage',
|
||
'prd.risk.view',
|
||
'prd.risk.manage',
|
||
'prd.payout.review',
|
||
'prd.tickets.view',
|
||
'prd.wallet_reconcile.view',
|
||
'prd.audit.view',
|
||
'prd.player_freeze.manage',
|
||
'prd.report.view',
|
||
'prd.report.export',
|
||
]);
|
||
|
||
$finance = AdminRole::query()->updateOrCreate(
|
||
['slug' => 'finance'],
|
||
['code' => 'finance', 'name' => '财务/对账员'],
|
||
);
|
||
$this->syncRolePermissions($finance, [
|
||
'prd.dashboard.view',
|
||
'prd.users.view_finance',
|
||
'prd.risk_cap.view',
|
||
'prd.rebate.view',
|
||
'prd.jackpot.view',
|
||
'prd.draw_result.view',
|
||
'prd.payout.view',
|
||
'prd.tickets.view',
|
||
'prd.wallet_reconcile.manage',
|
||
'prd.wallet_adjust.manage',
|
||
'prd.audit.view',
|
||
'prd.report.view',
|
||
'prd.report.export',
|
||
]);
|
||
|
||
$cs = AdminRole::query()->updateOrCreate(
|
||
['slug' => 'customer_service'],
|
||
['code' => 'customer_service', 'name' => '客服人员'],
|
||
);
|
||
$this->syncRolePermissions($cs, [
|
||
'prd.dashboard.view',
|
||
'prd.users.view_cs',
|
||
'prd.tickets.view',
|
||
'prd.draw_result.view',
|
||
'prd.wallet_reconcile.view_cs',
|
||
'prd.report.view',
|
||
]);
|
||
|
||
$username = 'admin';
|
||
AdminUser::query()->updateOrCreate(
|
||
['username' => $username],
|
||
[
|
||
'name' => '超级管理员',
|
||
'email' => null,
|
||
'password' => '123456',
|
||
'status' => 0,
|
||
],
|
||
);
|
||
|
||
/** @var AdminUser $admin */
|
||
$admin = AdminUser::query()->where('username', $username)->firstOrFail();
|
||
$siteId = AdminUser::defaultAdminSiteId();
|
||
$superId = (int) $super->getKey();
|
||
$admin->roles()->sync([
|
||
$superId => [
|
||
'site_id' => $siteId,
|
||
'granted_at' => now(),
|
||
],
|
||
]);
|
||
}
|
||
}
|