185 lines
5.7 KiB
PHP
185 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Enums\OperationType;
|
|
use App\Helpers\Paginator;
|
|
use App\Http\Requestes\AdminUserRequest;
|
|
use App\Http\Requestes\AdminUserUpdateRequest;
|
|
use App\Http\Requestes\RestPasswordRequest;
|
|
use App\Http\Resources\AdminUserResource;
|
|
use App\Models\AdminUser;
|
|
use App\Services\OperationLogService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class AdminUserController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = AdminUser::with(['roles'])->filter($request->all())->where('id', '>', 1);
|
|
$list = $query->paginate(Paginator::resolvePerPage('per_page', 20, 50));
|
|
|
|
return $this->json(AdminUserResource::collection($list));
|
|
}
|
|
|
|
public function store(AdminUserRequest $request)
|
|
{
|
|
$baseIds = $request->input('base_ids', []);
|
|
if (AdminUser::where('username', $request->input('username'))->exists()) {
|
|
return $this->error('该登录名已存在');
|
|
}
|
|
try {
|
|
DB::beginTransaction();
|
|
//添加管理员信息
|
|
$input = $request->input();
|
|
|
|
// 是否可查看所有基地
|
|
if ($viewAllBases = (bool) $request->input('view_all_bases', false)) {
|
|
$input['view_all_bases'] = $viewAllBases;
|
|
}
|
|
$input['password'] = bcrypt($request->input('password'));
|
|
|
|
$user = AdminUser::create($input);
|
|
|
|
if (! $user->view_all_bases) {
|
|
// 添加管理员查看基地的数据权限;
|
|
$user->bases()->sync($baseIds);
|
|
}
|
|
|
|
//添加管理员角色关联;
|
|
$user->roles()->sync($request->input('role_id'));
|
|
DB::commit();
|
|
} catch(\Throwable $th) {
|
|
DB::rollBack();
|
|
report($th);
|
|
|
|
return $this->error('添加失败,请稍后再试');
|
|
}
|
|
(new OperationLogService())->inLog(OperationType::Create, '', $user, $request->input());
|
|
|
|
return $this->success('添加成功');
|
|
}
|
|
|
|
public function show(AdminUser $adminUser)
|
|
{
|
|
$adminUser->load(['bases', 'roles']);
|
|
|
|
return $this->json(AdminUserResource::make($adminUser));
|
|
}
|
|
|
|
public function update(AdminUser $adminUser, AdminUserUpdateRequest $request)
|
|
{
|
|
$baseIds = $request->input('base_ids', []);
|
|
if (AdminUser::where('username', $request->input('username'))->where('id', '<>', $adminUser->id)->exists()) {
|
|
return $this->error('该登录名已存在');
|
|
}
|
|
try {
|
|
DB::beginTransaction();
|
|
|
|
$input = $request->input();
|
|
|
|
if ($viewAllBases = (bool) $request->input('view_all_bases', false)) {
|
|
$input['view_all_bases'] = $viewAllBases;
|
|
}
|
|
|
|
//添加管理员信息
|
|
$adminUser->update($input);
|
|
|
|
if (! $adminUser->view_all_bases) {
|
|
// 添加管理员查看基地的数据权限;
|
|
$adminUser->bases()->sync($baseIds);
|
|
}
|
|
|
|
//添加管理员角色关联;
|
|
$adminUser->roles()->sync($request->input('role_id'));
|
|
DB::commit();
|
|
} catch(\Throwable $th) {
|
|
DB::rollBack();
|
|
report($th);
|
|
|
|
return $this->error('修改失败,请稍后再试');
|
|
}
|
|
(new OperationLogService())->inLog(OperationType::Update, '', $adminUser, $request->input());
|
|
|
|
return $this->success('修改成功!');
|
|
}
|
|
|
|
public function destroy(AdminUser $adminUser)
|
|
{
|
|
if ($adminUser->id == 1) {
|
|
return $this->error('删除失败,请稍后再试');
|
|
}
|
|
try {
|
|
DB::beginTransaction();
|
|
$adminUser->bases()->sync([]);
|
|
$adminUser->roles()->sync([]);
|
|
$adminUser->delete();
|
|
DB::commit();
|
|
} catch(\Throwable $th) {
|
|
DB::rollBack();
|
|
report($th);
|
|
|
|
return $this->error('删除失败,请稍后再试');
|
|
}
|
|
(new OperationLogService())->inLog(OperationType::Delete, '', $adminUser);
|
|
|
|
return $this->success('删除成功!');
|
|
}
|
|
|
|
/**
|
|
* 启用/禁用
|
|
*
|
|
* @param AdminUser $adminUser
|
|
* @return void
|
|
*/
|
|
public function endable(AdminUser $adminUser)
|
|
{
|
|
if ($adminUser->id == 1) {
|
|
return $this->error('操作失败,请稍后再试');
|
|
}
|
|
$adminUser->update([
|
|
'is_enable' => (int) ! $adminUser->is_enable,
|
|
]);
|
|
|
|
$statusMsg = $adminUser->is_enable ? '禁用':'启用';
|
|
|
|
(new OperationLogService())->inLog(OperationType::Update, $statusMsg.'-用户【'.$adminUser->name.'】');
|
|
|
|
return $this->success('操作成功!');
|
|
}
|
|
|
|
public function editPassword(AdminUser $adminUser, RestPasswordRequest $request)
|
|
{
|
|
if ($adminUser->id == 1) {
|
|
return $this->error('操作失败,请稍后再试');
|
|
}
|
|
$adminUser->update([
|
|
'password' => bcrypt($request->input('password')),
|
|
]);
|
|
|
|
$statusMsg = '修改密码';
|
|
(new OperationLogService())->inLog(OperationType::Update, $statusMsg.'-用户【'.$adminUser->name.'】');
|
|
|
|
return $this->success('修改成功!');
|
|
}
|
|
|
|
public function unban(AdminUser $adminUser, Request $request)
|
|
{
|
|
if (! $request->user()->isAdministrator()) {
|
|
return $this->error('无操作权限');
|
|
}
|
|
|
|
if ($adminUser->banned_at) {
|
|
$adminUser->update([
|
|
'banned_reason' => '',
|
|
'banned_at' => null,
|
|
]);
|
|
|
|
(new OperationLogService())->inLog(OperationType::Update, '解封-用户【'.$adminUser->name.'】');
|
|
}
|
|
|
|
return $this->success('操作成功!');
|
|
}
|
|
}
|