feat: 增强后台设置校验、代理权限控制与财务审计能力
This commit is contained in:
@@ -10,6 +10,7 @@ use App\Http\Controllers\Controller;
|
||||
use App\Services\Agent\AgentAdminUserService;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\AdminAgentNodeAccess;
|
||||
use App\Support\AdminAgentScope;
|
||||
use App\Support\AdminUserApiPresenter;
|
||||
use App\Support\ApiMessage;
|
||||
use App\Http\Requests\Admin\AgentAdminUserStoreRequest;
|
||||
@@ -39,6 +40,17 @@ final class AgentNodeAdminUserStoreController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
if (! AdminAgentScope::nodeManageableBy($admin, $agent_node)) {
|
||||
return AdminAgentNodeAccess::denyUnlessCanManageParent($admin, $agent_node)
|
||||
?? ApiMessage::errorResponse(
|
||||
$request,
|
||||
'admin.agent_user_manage_denied',
|
||||
ErrorCode::AdminForbidden->value,
|
||||
null,
|
||||
403,
|
||||
);
|
||||
}
|
||||
|
||||
$user = $service->createUnderAgent($agent_node, $request->validated());
|
||||
|
||||
AuditLogger::recordForAdmin(
|
||||
|
||||
@@ -47,6 +47,14 @@ final class AgentNodeDestroyController extends Controller
|
||||
return ApiMessage::errorResponse($request, 'admin.agent_node_has_players_cannot_delete', ErrorCode::ValidationFailed->value, null, 422);
|
||||
}
|
||||
|
||||
if (DB::table('admin_user_agents')->where('agent_node_id', $agent_node->id)->exists()) {
|
||||
return ApiMessage::errorResponse($request, 'admin.agent_node_has_admin_users_cannot_delete', ErrorCode::ValidationFailed->value, null, 422);
|
||||
}
|
||||
|
||||
if ($service->hasBlockingCustomRoles($agent_node)) {
|
||||
return ApiMessage::errorResponse($request, 'admin.agent_node_has_roles_cannot_delete', ErrorCode::ValidationFailed->value, null, 422);
|
||||
}
|
||||
|
||||
$before = AgentNodePresenter::item($agent_node);
|
||||
$service->destroy($agent_node);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ use App\Http\Controllers\Controller;
|
||||
use App\Services\Agent\AgentRoleService;
|
||||
use App\Lottery\ErrorCode;
|
||||
use App\Support\AdminAgentNodeAccess;
|
||||
use App\Support\AdminAgentScope;
|
||||
use App\Support\AdminRoleApiPresenter;
|
||||
use App\Support\ApiMessage;
|
||||
use App\Http\Requests\Admin\AgentRoleStoreRequest;
|
||||
@@ -39,6 +40,17 @@ final class AgentNodeRoleStoreController extends Controller
|
||||
);
|
||||
}
|
||||
|
||||
if (! AdminAgentScope::nodeManageableBy($admin, $agent_node)) {
|
||||
return AdminAgentNodeAccess::denyUnlessCanManageParent($admin, $agent_node)
|
||||
?? ApiMessage::errorResponse(
|
||||
$request,
|
||||
'admin.agent_role_manage_denied',
|
||||
ErrorCode::AdminForbidden->value,
|
||||
null,
|
||||
403,
|
||||
);
|
||||
}
|
||||
|
||||
$role = $service->createForAgent($admin, $agent_node, $request->validated());
|
||||
|
||||
AuditLogger::recordForAdmin(
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Requests\Admin;
|
||||
|
||||
use App\Models\AdminUser;
|
||||
use App\Http\Requests\ApiFormRequest;
|
||||
use App\Support\AdminSettingPolicy;
|
||||
|
||||
final class AdminSettingBatchUpdateRequest extends ApiFormRequest
|
||||
{
|
||||
@@ -22,8 +23,8 @@ final class AdminSettingBatchUpdateRequest extends ApiFormRequest
|
||||
|
||||
foreach ($items as $item) {
|
||||
$key = is_array($item) ? (string) ($item['key'] ?? '') : '';
|
||||
if (str_starts_with($key, 'settlement.')) {
|
||||
return $admin->hasAdminPermission('prd.payout.manage');
|
||||
if (! AdminSettingPolicy::canUpdate($admin, $key)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,4 +39,15 @@ final class AdminSettingBatchUpdateRequest extends ApiFormRequest
|
||||
'items.*.value' => ['present'],
|
||||
];
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [
|
||||
function (): void {
|
||||
/** @var list<array{key: string, value: mixed}> $items */
|
||||
$items = $this->validated('items', []);
|
||||
AdminSettingPolicy::validateItems($items);
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace App\Http\Requests\Admin;
|
||||
|
||||
use App\Models\AdminUser;
|
||||
use App\Http\Requests\ApiFormRequest;
|
||||
use App\Support\AdminSettingPolicy;
|
||||
|
||||
final class AdminSettingUpdateRequest extends ApiFormRequest
|
||||
{
|
||||
@@ -15,11 +16,7 @@ final class AdminSettingUpdateRequest extends ApiFormRequest
|
||||
}
|
||||
|
||||
$key = (string) $this->route('key', '');
|
||||
if (str_starts_with($key, 'settlement.')) {
|
||||
return $admin->hasAdminPermission('prd.payout.manage');
|
||||
}
|
||||
|
||||
return true;
|
||||
return AdminSettingPolicy::canUpdate($admin, $key);
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
@@ -28,4 +25,17 @@ final class AdminSettingUpdateRequest extends ApiFormRequest
|
||||
'value' => ['present'],
|
||||
];
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [
|
||||
function (): void {
|
||||
$key = (string) $this->route('key', '');
|
||||
AdminSettingPolicy::validateItems([[
|
||||
'key' => $key,
|
||||
'value' => $this->validated('value'),
|
||||
]]);
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user