48 lines
1.7 KiB
PHP
48 lines
1.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace App\Http\Controllers\Concerns;
|
||
|
|
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Illuminate\Support\Facades\DB;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Резолв saas_admin_users.id для audit-trail на MVP (saas-admin SSO ⏸ Б-1).
|
||
|
|
*
|
||
|
|
* Берёт admin_user_id из request-параметра; при отсутствии валидного —
|
||
|
|
* создаёт/переиспользует системный стаб-аккаунт (не loginable, is_active=false),
|
||
|
|
* чтобы соблюсти NOT NULL + FK на saas_admin_users в saas_admin_audit_log.
|
||
|
|
*
|
||
|
|
* Паттерн ранее дублировался в AdminPricingTiersController /
|
||
|
|
* AdminSystemSettingsController; новый код использует этот трейт.
|
||
|
|
*/
|
||
|
|
trait ResolvesAdminUserId
|
||
|
|
{
|
||
|
|
protected function resolveAdminUserId(Request $request, string $stubEmail, string $stubName): int
|
||
|
|
{
|
||
|
|
$requested = $request->input('admin_user_id');
|
||
|
|
if (is_int($requested) || (is_string($requested) && ctype_digit($requested))) {
|
||
|
|
$existing = DB::table('saas_admin_users')->where('id', (int) $requested)->value('id');
|
||
|
|
if ($existing !== null) {
|
||
|
|
return (int) $existing;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$existingId = DB::table('saas_admin_users')->where('email', $stubEmail)->value('id');
|
||
|
|
if ($existingId !== null) {
|
||
|
|
return (int) $existingId;
|
||
|
|
}
|
||
|
|
|
||
|
|
return (int) DB::table('saas_admin_users')->insertGetId([
|
||
|
|
'email' => $stubEmail,
|
||
|
|
'full_name' => $stubName,
|
||
|
|
'password_hash' => '$2y$04$system-stub-not-loginable',
|
||
|
|
'role' => 'super_admin',
|
||
|
|
'is_active' => false,
|
||
|
|
'sso_provider' => 'local',
|
||
|
|
'is_break_glass' => false,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|