add superadmin dashboard. subscriptions
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
namespace App\Database\Seeds;
|
||||
|
||||
use CodeIgniter\Database\Seeder;
|
||||
use App\Models\UserModel;
|
||||
|
||||
/**
|
||||
* Seeder для назначения системных ролей пользователям
|
||||
*
|
||||
* Использование:
|
||||
* php spark db:seed "App\Database\Seeds\SetSystemRoleSeeder" -email=admin@example.com -role=superadmin
|
||||
*
|
||||
* Только email (по умолчанию роль superadmin):
|
||||
* php spark db:seed "App\Database\Seeds\SetSystemRoleSeeder" -email=admin@example.com
|
||||
*/
|
||||
class SetSystemRoleSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Системные роли
|
||||
*/
|
||||
public const ROLE_USER = 'user';
|
||||
public const ROLE_ADMIN = 'admin';
|
||||
public const ROLE_SUPERADMIN = 'superadmin';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// Получаем параметры из командной строки
|
||||
$email = $this->parseArg('email');
|
||||
$role = $this->parseArg('role') ?? self::ROLE_SUPERADMIN;
|
||||
|
||||
if (empty($email)) {
|
||||
echo "Ошибка: Не указан email пользователя\n";
|
||||
echo "\n";
|
||||
echo "Использование:\n";
|
||||
echo " php spark db:seed \"App\Database\Seeds\SetSystemRoleSeeder\" -email=admin@example.com -role=superadmin\n";
|
||||
echo "\n";
|
||||
echo "Доступные роли: user, admin, superadmin\n";
|
||||
echo "По умолчанию: superadmin\n";
|
||||
return;
|
||||
}
|
||||
|
||||
$this->assignRole($email, $role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Парсинг аргумента из командной строки
|
||||
*/
|
||||
protected function parseArg(string $name): ?string
|
||||
{
|
||||
global $argv;
|
||||
|
||||
foreach ($argv as $arg) {
|
||||
// Формат: -email=value
|
||||
if (preg_match("/^-{$name}=(.+)$/", $arg, $matches)) {
|
||||
return $matches[1];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Назначение роли пользователю по email
|
||||
*/
|
||||
public function assignRole(string $email, string $role): bool
|
||||
{
|
||||
$userModel = new UserModel();
|
||||
|
||||
// Ищем пользователя по email
|
||||
$user = $userModel->where('email', $email)->first();
|
||||
|
||||
if (!$user) {
|
||||
echo "Ошибка: Пользователь с email '{$email}' не найден в базе данных\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Отладка
|
||||
echo "DEBUG: Found user ID = " . $user['id'] . "\n";
|
||||
echo "DEBUG: Current system_role = " . ($user['system_role'] ?? 'NULL') . "\n";
|
||||
|
||||
// Валидируем роль
|
||||
$validRoles = [self::ROLE_USER, self::ROLE_ADMIN, self::ROLE_SUPERADMIN];
|
||||
if (!in_array($role, $validRoles)) {
|
||||
echo "Ошибка: Неизвестная роль '{$role}'. Доступные роли: " . implode(', ', $validRoles) . "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Используем DB Builder для обновления
|
||||
$db = \Config\Database::connect();
|
||||
$result = $db->table('users')
|
||||
->where('id', $user['id'])
|
||||
->set('system_role', $role)
|
||||
->update();
|
||||
|
||||
if (!$result) {
|
||||
echo "Ошибка обновления\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Проверяем что обновилось
|
||||
$updatedUser = $userModel->find($user['id']);
|
||||
echo "DEBUG: New system_role = " . ($updatedUser['system_role'] ?? 'NULL') . "\n";
|
||||
|
||||
$roleLabels = [
|
||||
self::ROLE_USER => 'Пользователь',
|
||||
self::ROLE_ADMIN => 'Администратор',
|
||||
self::ROLE_SUPERADMIN => 'Суперадмин',
|
||||
];
|
||||
|
||||
$roleLabel = $roleLabels[$role] ?? $role;
|
||||
|
||||
echo "Успех!\n";
|
||||
echo " Email: {$email}\n";
|
||||
echo " User ID: {$user['id']}\n";
|
||||
echo " Назначенная роль: {$roleLabel}\n";
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user