79 lines
2.2 KiB
PHP
79 lines
2.2 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\admin\controller;
|
||
|
|
|
||
|
|
use app\admin\model\Admin;
|
||
|
|
use app\admin\model\Menu;
|
||
|
|
use app\util\Util;
|
||
|
|
use support\Redis;
|
||
|
|
use support\Request;
|
||
|
|
use app\util\JwtUtil;
|
||
|
|
|
||
|
|
class AuthController
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* 不需要登录的方法
|
||
|
|
*/
|
||
|
|
protected $noNeedLogin = ['login'];
|
||
|
|
public function login(Request $request)
|
||
|
|
{
|
||
|
|
$username = Util::getParam($request, 'username');
|
||
|
|
if (Util::isEmpty($username)) {
|
||
|
|
return Util::fail([], trans('required_not_null'));
|
||
|
|
}
|
||
|
|
$password = Util::getParam($request, 'password');
|
||
|
|
if (Util::isEmpty($password)) {
|
||
|
|
return Util::fail([], trans('required_not_null'));
|
||
|
|
}
|
||
|
|
|
||
|
|
$admin = Admin::where('status', 1)
|
||
|
|
->where('username', $username)
|
||
|
|
->first();
|
||
|
|
if (!$admin) {
|
||
|
|
return Util::fail(['user' => $admin], trans('user_none'));
|
||
|
|
}
|
||
|
|
|
||
|
|
$userPassword = $admin->password;
|
||
|
|
$user = $admin->toArray();
|
||
|
|
|
||
|
|
//加密
|
||
|
|
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
|
||
|
|
|
||
|
|
//验证密码
|
||
|
|
if (!password_verify($password, $userPassword)) {
|
||
|
|
return Util::fail([], trans('password_error'));
|
||
|
|
}
|
||
|
|
$userId = $user['id']; // 实际从数据库获取
|
||
|
|
|
||
|
|
|
||
|
|
Redis::set('admin_' . $userId, $user);
|
||
|
|
|
||
|
|
//密码验证成功后加密生成 Token
|
||
|
|
$token = JwtUtil::generateToken('admin_'.$userId);
|
||
|
|
$result = $user;
|
||
|
|
unset($result['password']);
|
||
|
|
$result['token'] = $token;
|
||
|
|
|
||
|
|
return Util::success($result, trans('login_success'));
|
||
|
|
}
|
||
|
|
|
||
|
|
public function menus(Request $request)
|
||
|
|
{
|
||
|
|
$user = $request->user;
|
||
|
|
$menus = Menu::with(['child.child' => function($query) {
|
||
|
|
$query->where('status', 1)->orderBy('sort');
|
||
|
|
}])
|
||
|
|
->where('parent_id', 0)
|
||
|
|
->where('status', 1)
|
||
|
|
->orderBy('sort')
|
||
|
|
->get()
|
||
|
|
->filter(function($menu) use ($user) {
|
||
|
|
if (empty($menu->permission_slug)) {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
return $user->hasPermission($menu->permission_slug);
|
||
|
|
});
|
||
|
|
|
||
|
|
return Util::success($menus);
|
||
|
|
}
|
||
|
|
}
|