<?php
namespace App\Modules\Admin\Services;
use App\Exceptions\Admin\AuthException;
use App\Exceptions\Admin\AuthTokenException;
use App\Exceptions\InvalidRequestException;
use App\Modules\Admin\Entities\Log\AdminLoginLog;
use App\Modules\Admin\Entities\Rabc\Admin;
use App\Modules\Admin\Entities\Rabc\AdminMenu;
use App\Services\Service;
use Illuminate\Support\Facades\Auth;
class AuthService extends Service
{
protected $guard = 'admin';
public function login($data)
{
$auth = Auth::guard($this->guard);
$token = $auth->attempt($data);
if (!$token) throw new AuthException('认证失败!');
$admin = $auth->user();
if ( !$admin ) throw new AuthException('管理员账户不存在!');
switch ($admin->is_check) {
case 0:
throw new AuthException('该管理员尚未启用!', 0, $admin->admin_id);
break;
case 2:
throw new AuthException('该管理员已禁用!', 0, $admin->admin_id);
break;
}
AdminLoginLog::getInstance()->add($admin->admin_id, 1, '登录成功');
return $this->respondWithToken($token);
}
public function me()
{
if (!$admin = Auth::guard($this->guard)->user()){
throw new AuthTokenException('认证失败!');
}
$admin->admin_head = asset($admin->admin_head);
$admin['roles'] = ['admin'];
return $admin;
}
public function getRabcList()
{
if (!$admin = Auth::guard($this->guard)->user()){
throw new AuthTokenException('认证失败!');
}
if($admin->admin_id == 1){
return list_to_tree(AdminMenu::getInstance()->getAllMenus()->toArray());
}
$admin = Admin::with(['roles.menus'])->find($admin->admin_id)->toArray();
$menus = [];
foreach (array_column($admin['roles'], 'menus') as $item){
$menus = array_merge($menus, $item);
}
return list_to_tree($menus);
}
public function logout()
{
Auth::guard($this->guard)->logout();
return true;
}
public function refresh()
{
return $this->respondWithToken(auth($this->guard)->refresh());
}
protected function respondWithToken($token)
{
return [
'access_token' => $token,
'token_type' => 'Bearer',
'expires_time' => time() + Auth::guard($this->guard)->factory()->getTTL() * 60
];
}
}