mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-07 02:22:48 +08:00
feat: 发布智能体版
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace base\common\command\admin\user;
|
||||
|
||||
use app\admin\model\SystemAdmin;
|
||||
use app\admin\model\SystemAuth;
|
||||
use app\common\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
class AdminUserRoleAssignBase extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
parent::configure();
|
||||
|
||||
$this->setName('admin:user:role:assign')
|
||||
->addOption('user-id', null, Option::VALUE_REQUIRED, '用户ID')
|
||||
->addOption('role-ids', null, Option::VALUE_REQUIRED, '角色ID列表(逗号分隔)')
|
||||
->setDescription('给用户分配角色');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$userId = $input->getOption('user-id');
|
||||
$roleIdsParam = $input->getOption('role-ids');
|
||||
|
||||
if (empty($userId)) {
|
||||
$output->error('用户ID不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($roleIdsParam)) {
|
||||
$output->error('角色ID不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$admin = SystemAdmin::find($userId);
|
||||
if (empty($admin)) {
|
||||
$output->error('用户ID ' . $userId . ' 不存在');
|
||||
return false;
|
||||
}
|
||||
|
||||
$roleIds = $this->parseRoleIds($roleIdsParam);
|
||||
if (empty($roleIds)) {
|
||||
$output->error('角色ID列表为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
$validRoleIds = $this->validateRoleIds($roleIds);
|
||||
$invalidRoleIds = array_diff($roleIds, $validRoleIds);
|
||||
|
||||
if (!empty($invalidRoleIds)) {
|
||||
$invalidCount = count($invalidRoleIds);
|
||||
$output->error("[错误] 发现 {$invalidCount} 个无效的角色ID:");
|
||||
foreach (array_values($invalidRoleIds) as $roleId) {
|
||||
$output->error(" - {$roleId}");
|
||||
}
|
||||
$output->writeln('');
|
||||
}
|
||||
|
||||
if (empty($validRoleIds)) {
|
||||
$output->error("有效角色ID数: 0");
|
||||
$output->error("分配失败");
|
||||
return false;
|
||||
}
|
||||
|
||||
$existingAuthIds = $admin->auth_ids;
|
||||
$existingAuthIdArray = [];
|
||||
if (!empty($existingAuthIds)) {
|
||||
$existingAuthIdArray = array_filter(explode(',', $existingAuthIds));
|
||||
}
|
||||
|
||||
$newRoleIds = array_diff($validRoleIds, $existingAuthIdArray);
|
||||
|
||||
if (empty($newRoleIds)) {
|
||||
$output->info('所有角色已存在,无需重复分配');
|
||||
return true;
|
||||
}
|
||||
|
||||
$mergedRoleIds = array_merge($existingAuthIdArray, $newRoleIds);
|
||||
$mergedRoleIds = array_values(array_unique($mergedRoleIds));
|
||||
|
||||
$admin->auth_ids = implode(',', $mergedRoleIds);
|
||||
$admin->save();
|
||||
|
||||
$output->info('角色分配成功');
|
||||
$output->info('用户ID: ' . $userId);
|
||||
$output->info('新增的角色ID: ' . implode(', ', $newRoleIds));
|
||||
$output->info('该用户总角色数: ' . count($mergedRoleIds));
|
||||
$output->info('所有角色ID: ' . implode(', ', $mergedRoleIds));
|
||||
} catch (\Throwable $e) {
|
||||
$output->error('分配角色失败: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function parseRoleIds(string $roleIdsParam): array
|
||||
{
|
||||
$roleIds = explode(',', $roleIdsParam);
|
||||
$roleIds = array_map('trim', $roleIds);
|
||||
$roleIds = array_filter($roleIds);
|
||||
|
||||
return array_values($roleIds);
|
||||
}
|
||||
|
||||
protected function validateRoleIds(array $roleIds): array
|
||||
{
|
||||
$validRoleIds = SystemAuth::whereIn('id', $roleIds)
|
||||
->where('delete_time', 0)
|
||||
->column('id');
|
||||
|
||||
return $validRoleIds;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace base\common\command\admin\user;
|
||||
|
||||
use app\admin\model\SystemAdmin;
|
||||
use app\admin\model\SystemAuth;
|
||||
use app\common\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
class AdminUserRoleListBase extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
parent::configure();
|
||||
|
||||
$this->setName('admin:user:role:list')
|
||||
->addOption('user-id', null, Option::VALUE_REQUIRED, '用户ID')
|
||||
->setDescription('查看用户角色');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$userId = $input->getOption('user-id');
|
||||
|
||||
if (empty($userId)) {
|
||||
$output->error('用户ID不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$user = SystemAdmin::find($userId);
|
||||
if (empty($user)) {
|
||||
$output->error('用户ID ' . $userId . ' 不存在');
|
||||
return false;
|
||||
}
|
||||
|
||||
$authIds = $user->auth_ids;
|
||||
$authIdArray = [];
|
||||
|
||||
if (!empty($authIds)) {
|
||||
$authIdArray = array_filter(explode(',', $authIds));
|
||||
}
|
||||
|
||||
if (empty($authIdArray)) {
|
||||
$output->info('用户角色列表');
|
||||
$output->writeln('================================');
|
||||
$output->info('用户ID: ' . $user->id);
|
||||
$output->info('用户名: ' . $user->username);
|
||||
$output->writeln('--------------------------------');
|
||||
$output->comment('该用户没有分配任何角色');
|
||||
return true;
|
||||
}
|
||||
|
||||
$roles = SystemAuth::whereIn('id', $authIdArray)
|
||||
->where('delete_time', 0)
|
||||
->field('id,title,status,remark')
|
||||
->select()
|
||||
->toArray();
|
||||
|
||||
$output->info('用户角色列表');
|
||||
$output->writeln('================================');
|
||||
$output->info('用户ID: ' . $user->id);
|
||||
$output->info('用户名: ' . $user->username);
|
||||
$output->writeln('--------------------------------');
|
||||
|
||||
if (empty($roles)) {
|
||||
$output->comment('没有找到有效的角色信息');
|
||||
} else {
|
||||
foreach ($roles as $role) {
|
||||
$statusText = $role['status'] == 1 ? '启用' : '禁用';
|
||||
$output->info('角色ID: ' . $role['id']);
|
||||
$output->comment(' 角色名称: ' . $role['title']);
|
||||
$output->comment(' 状态: ' . $statusText);
|
||||
if (!empty($role['remark'])) {
|
||||
$output->comment(' 备注: ' . $role['remark']);
|
||||
}
|
||||
$output->writeln('--------------------------------');
|
||||
}
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$output->error('获取用户角色失败: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace base\common\command\admin\user;
|
||||
|
||||
use app\admin\model\SystemAdmin;
|
||||
use app\admin\model\SystemAuth;
|
||||
use app\common\console\Command;
|
||||
use think\console\Input;
|
||||
use think\console\input\Option;
|
||||
use think\console\Output;
|
||||
|
||||
class AdminUserRoleRevokeBase extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
parent::configure();
|
||||
|
||||
$this->setName('admin:user:role:revoke')
|
||||
->addOption('user-id', null, Option::VALUE_REQUIRED, '用户ID')
|
||||
->addOption('role-ids', null, Option::VALUE_REQUIRED, '角色ID列表(逗号分隔)')
|
||||
->setDescription('撤回用户角色');
|
||||
}
|
||||
|
||||
protected function execute(Input $input, Output $output)
|
||||
{
|
||||
$userId = $input->getOption('user-id');
|
||||
$roleIdsParam = $input->getOption('role-ids');
|
||||
|
||||
if (empty($userId)) {
|
||||
$output->error('用户ID不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($roleIdsParam)) {
|
||||
$output->error('角色ID不能为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
$admin = SystemAdmin::find($userId);
|
||||
if (empty($admin)) {
|
||||
$output->error('用户ID ' . $userId . ' 不存在');
|
||||
return false;
|
||||
}
|
||||
|
||||
$roleIds = $this->parseRoleIds($roleIdsParam);
|
||||
if (empty($roleIds)) {
|
||||
$output->error('角色ID列表为空');
|
||||
return false;
|
||||
}
|
||||
|
||||
$validRoleIds = $this->validateRoleIds($roleIds);
|
||||
$invalidRoleIds = array_diff($roleIds, $validRoleIds);
|
||||
|
||||
if (!empty($invalidRoleIds)) {
|
||||
$output->comment('警告: 以下角色ID无效: ' . implode(', ', array_values($invalidRoleIds)));
|
||||
}
|
||||
|
||||
if (empty($validRoleIds)) {
|
||||
$output->error('没有有效的角色ID');
|
||||
return false;
|
||||
}
|
||||
|
||||
$existingAuthIds = $admin->auth_ids;
|
||||
if (empty($existingAuthIds)) {
|
||||
$output->error('用户未分配任何角色,无法撤回');
|
||||
return false;
|
||||
}
|
||||
|
||||
$existingAuthIdArray = array_filter(explode(',', $existingAuthIds));
|
||||
|
||||
$revokedRoleIds = array_intersect($validRoleIds, $existingAuthIdArray);
|
||||
|
||||
if (empty($revokedRoleIds)) {
|
||||
$output->error('没有角色可以撤回(用户不拥有指定的角色)');
|
||||
return false;
|
||||
}
|
||||
|
||||
$remainingRoleIds = array_diff($existingAuthIdArray, $revokedRoleIds);
|
||||
$admin->auth_ids = empty($remainingRoleIds) ? '' : implode(',', $remainingRoleIds);
|
||||
$admin->save();
|
||||
|
||||
$output->info('角色撤回成功');
|
||||
$output->info('用户ID: ' . $userId);
|
||||
$output->info('撤回的角色ID: ' . implode(', ', $revokedRoleIds));
|
||||
$output->info('该用户剩余角色数: ' . count($remainingRoleIds));
|
||||
if (!empty($remainingRoleIds)) {
|
||||
$output->info('剩余角色ID: ' . implode(', ', $remainingRoleIds));
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$output->error('撤回角色失败: ' . $e->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function parseRoleIds(string $roleIdsParam): array
|
||||
{
|
||||
$roleIds = explode(',', $roleIdsParam);
|
||||
$roleIds = array_map('trim', $roleIds);
|
||||
$roleIds = array_filter($roleIds);
|
||||
|
||||
return array_values($roleIds);
|
||||
}
|
||||
|
||||
protected function validateRoleIds(array $roleIds): array
|
||||
{
|
||||
$validRoleIds = SystemAuth::whereIn('id', $roleIds)
|
||||
->where('delete_time', 0)
|
||||
->column('id');
|
||||
|
||||
return $validRoleIds;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user