- 新增 `LotteryDevPruneDrawBacklogCommand` 命令,用于按营业日区间删除积压的抽奖期号,并支持干运行和级联删除相关数据。 - 添加多个迁移文件以同步数据库结构,包括重命名重复的迁移文件、添加用户名字段、迁移抽奖状态到领域字典、合并显示名称字段、扩展审计日志目标类型字段,以及细化后台权限管理。 - 更新 `AdminRbacAndUserSeeder` 以包含角色代码字段,确保一致性与可维护性。
116 lines
3.5 KiB
PHP
116 lines
3.5 KiB
PHP
<?php
|
||
|
||
namespace Database\Seeders;
|
||
|
||
use App\Models\AdminRole;
|
||
use App\Models\AdminUser;
|
||
use Illuminate\Database\Seeder;
|
||
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
|
||
{
|
||
$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(),
|
||
],
|
||
]);
|
||
}
|
||
}
|