catchAdmin/modules/User/Http/Controllers/UserController.php

163 lines
3.8 KiB
PHP
Raw Normal View History

2022-12-05 23:01:12 +08:00
<?php
namespace Modules\User\Http\Controllers;
use Catch\Base\CatchController as Controller;
2022-12-16 18:30:36 +08:00
use Catch\Support\Module\ModuleRepository;
2022-12-05 23:01:12 +08:00
use Illuminate\Contracts\Auth\Authenticatable;
2022-12-23 19:47:13 +08:00
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
2023-04-17 16:47:53 +08:00
use Modules\Permissions\Models\Departments;
2022-12-05 23:01:12 +08:00
use Modules\User\Models\LogLogin;
2022-12-23 19:47:13 +08:00
use Modules\User\Models\LogOperate;
2022-12-14 19:25:52 +08:00
use Modules\User\Models\User;
2022-12-23 19:47:13 +08:00
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
2023-05-16 08:13:20 +08:00
use Modules\User\Http\Requests\UserRequest;
use Illuminate\Http\Request;
2022-12-05 23:01:12 +08:00
class UserController extends Controller
{
public function __construct(
2022-12-14 19:25:52 +08:00
protected readonly User $user
2022-12-05 23:01:12 +08:00
) {
}
/**
* get list
*
* @return mixed
*/
public function index()
{
2023-04-06 21:33:36 +08:00
return $this->user->setBeforeGetList(function ($query){
if (! $this->getLoginUser()->isSuperAdmin()) {
2023-04-17 16:47:53 +08:00
$query = $query->where('id', '<>', config('catch.super_admin'));
}
if (\request()->has('department_id')) {
$departmentId = \request()->get('department_id');
$followDepartmentIds = app(Departments::class)->findFollowDepartments(\request()->get('department_id'));
$followDepartmentIds[] = $departmentId;
$query = $query->whereIn('department_id', $followDepartmentIds);
2023-04-06 21:33:36 +08:00
}
return $query;
})->getList();
2022-12-05 23:01:12 +08:00
}
/**
* store
*
2023-05-16 08:13:20 +08:00
* @param UserRequest $request
2022-12-05 23:01:12 +08:00
* @return false|mixed
*/
2023-05-16 08:13:20 +08:00
public function store(UserRequest $request)
2022-12-05 23:01:12 +08:00
{
return $this->user->storeBy($request->all());
}
/**
* show
*
* @param $id
* @return mixed
*/
public function show($id)
{
2022-12-16 18:30:36 +08:00
$user = $this->user->firstBy($id)->makeHidden('password');
2022-12-14 19:25:52 +08:00
2022-12-16 18:30:36 +08:00
if (app(ModuleRepository::class)->enabled('permissions')) {
$user->setRelations([
'roles' => $user->roles->pluck('id'),
2022-12-14 19:25:52 +08:00
2022-12-16 18:30:36 +08:00
'jobs' => $user->jobs->pluck('id')
]);
}
return $user;
2022-12-05 23:01:12 +08:00
}
/**
* update
*
* @param $id
2023-05-16 08:13:20 +08:00
* @param UserRequest $request
2022-12-05 23:01:12 +08:00
* @return mixed
*/
2023-05-16 08:13:20 +08:00
public function update($id, UserRequest $request)
2022-12-05 23:01:12 +08:00
{
return $this->user->updateBy($id, $request->all());
}
/**
* destroy
*
* @param $id
* @return bool|null
*/
public function destroy($id)
{
if ($this->user->deleteBy($id)) {
// 撤销用户的所有令牌
$this->user->tokens()->delete();
}
return true;
2022-12-05 23:01:12 +08:00
}
/**
* enable
*
* @param $id
* @return bool
*/
public function enable($id)
{
2022-12-14 19:25:52 +08:00
return $this->user->toggleBy($id);
2022-12-05 23:01:12 +08:00
}
/**
* online user
*
* @return Authenticatable
*/
public function online(Request $request)
{
2022-12-14 19:25:52 +08:00
/* @var User $user */
2022-12-10 18:29:42 +08:00
$user = $this->getLoginUser()->withPermissions();
2022-12-05 23:01:12 +08:00
if ($request->isMethod('post')) {
return $user->updateBy($user->id, $request->all());
}
return $user;
}
/**
* login log
* @param LogLogin $logLogin
2022-12-23 19:47:13 +08:00
* @return LengthAwarePaginator
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
2022-12-05 23:01:12 +08:00
*/
public function loginLog(LogLogin $logLogin)
{
2022-12-23 19:47:13 +08:00
$user = $this->getLoginUser();
return $logLogin->getUserLogBy($user->isSuperAdmin() ? null : $user->email);
}
public function operateLog(LogOperate $logOperate, Request $request)
{
$scope = $request->get('scope', 'self');
return $logOperate->setBeforeGetList(function ($builder) use ($scope){
if ($scope == 'self') {
return $builder->where('creator_id', $this->getLoginUserId());
}
return $builder;
})->getList();
2022-12-05 23:01:12 +08:00
}
}