modified 完善细节

This commit is contained in:
zhaoxiang 2020-10-12 14:18:50 +08:00
parent f62885ed67
commit 7ecc2c4b06
5 changed files with 62 additions and 37 deletions

View File

@ -22,8 +22,10 @@ class Login extends Base {
/** /**
* 用户登录【账号密码登录】 * 用户登录【账号密码登录】
* @return \think\Response * @return Response
* @throws \think\Exception * @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public function index(): Response { public function index(): Response {
@ -37,7 +39,7 @@ class Login extends Base {
} else { } else {
$password = Tools::userMd5($password); $password = Tools::userMd5($password);
} }
$userInfo = AdminUser::find(['username' => $username, 'password' => $password]); $userInfo = (new AdminUser())->where('username', $username)->where('password', $password)->find();
if (!empty($userInfo)) { if (!empty($userInfo)) {
if ($userInfo['status']) { if ($userInfo['status']) {
//更新用户数据 //更新用户数据
@ -45,13 +47,13 @@ class Login extends Base {
$data = []; $data = [];
if ($userData) { if ($userData) {
$userData->login_times++; $userData->login_times++;
$userData->last_login_ip = $this->request->ip(1); $userData->last_login_ip = sprintf("%u", ip2long($this->request->ip()));
$userData->last_login_time = time(); $userData->last_login_time = time();
$userData->save(); $userData->save();
} else { } else {
$data['login_times'] = 1; $data['login_times'] = 1;
$data['uid'] = $userInfo['id']; $data['uid'] = $userInfo['id'];
$data['last_login_ip'] = $this->request->ip(1); $data['last_login_ip'] = sprintf("%u", ip2long($this->request->ip()));
$data['last_login_time'] = time(); $data['last_login_time'] = time();
$data['head_img'] = ''; $data['head_img'] = '';
AdminUserData::create($data); AdminUserData::create($data);
@ -65,7 +67,7 @@ class Login extends Base {
return $this->buildFailed(ReturnCode::LOGIN_ERROR, '用户名密码不正确'); return $this->buildFailed(ReturnCode::LOGIN_ERROR, '用户名密码不正确');
} }
$userInfo['access'] = $this->getAccess($userInfo['id']); $userInfo['access'] = $this->getAccess($userInfo['id']);
$userInfo['menu'] = $this->getAccessMenu($userInfo['id']); $userInfo['menu'] = $this->getAccessMenuData($userInfo['id']);
$apiAuth = md5(uniqid() . time()); $apiAuth = md5(uniqid() . time());
cache('Login:' . $apiAuth, json_encode($userInfo), config('apiadmin.ONLINE_TIME')); cache('Login:' . $apiAuth, json_encode($userInfo), config('apiadmin.ONLINE_TIME'));
@ -73,51 +75,60 @@ class Login extends Base {
$userInfo['apiAuth'] = $apiAuth; $userInfo['apiAuth'] = $apiAuth;
return $this->buildSuccess($userInfo, '登录成功'); return $this->buildSuccess($userInfo->toArray(), '登录成功');
} }
/** /**
* 获取用户信息 * 获取用户信息
* @return mixed * @return Response
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public function getUserInfo() { public function getUserInfo(): Response {
return $this->buildSuccess($this->userInfo); return $this->buildSuccess($this->userInfo);
} }
/** /**
* 用户登出 * 用户登出
* @return array * @return Response
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public function logout() { public function logout(): Response {
$ApiAuth = $this->request->header('ApiAuth'); $ApiAuth = $this->request->header('Api-Auth');
cache('Login:' . $ApiAuth, null); cache('Login:' . $ApiAuth, null);
cache('Login:' . $this->userInfo['id'], null); cache('Login:' . $this->userInfo['id'], null);
return $this->buildSuccess([], '登出成功'); return $this->buildSuccess([], '登出成功');
} }
/**
* 获取当前用户的允许菜单
* @return Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author zhaoxiang <zhaoxiang051405@gmail.com>
*/
public function getAccessMenu(): Response {
return $this->buildSuccess($this->getAccessMenuData($this->userInfo['id']));
}
/** /**
* 获取当前用户的允许菜单 * 获取当前用户的允许菜单
* @param int $uid * @param int $uid
* @return array * @return array
* @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException * @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public function getAccessMenu($uid = 0) { public function getAccessMenuData(int $uid): array {
if ($uid == 0) {
$uid = $this->userInfo['id'];
}
$returnData = []; $returnData = [];
$isSupper = Tools::isAdministrator($uid); $isSupper = Tools::isAdministrator($uid);
if ($isSupper) { if ($isSupper) {
$access = (new AdminMenu())->where('router', '<>', '')->select(); $access = (new AdminMenu())->where('router', '<>', '')->select();
$returnData = Tools::listToTree(Tools::buildArrFromObj($access)); $returnData = Tools::listToTree(Tools::buildArrFromObj($access));
} else { } else {
$groups = AdminAuthGroupAccess::get(['uid' => $uid]); $groups = (new AdminAuthGroupAccess())->where('uid', $uid)->find();
if (isset($groups) && $groups->group_id) { if (isset($groups) && $groups->group_id) {
$access = (new AdminAuthRule())->whereIn('group_id', $groups->group_id)->select(); $access = (new AdminAuthRule())->whereIn('group_id', $groups->group_id)->select();
$access = array_unique(array_column(Tools::buildArrFromObj($access), 'url')); $access = array_unique(array_column(Tools::buildArrFromObj($access), 'url'));
@ -127,28 +138,28 @@ class Login extends Base {
RouterTool::buildVueRouter($returnData); RouterTool::buildVueRouter($returnData);
} }
} }
if ($uid == 0) {
return $this->buildSuccess($returnData);
} else {
return $returnData; return $returnData;
} }
}
/** /**
* 获取用户权限数据 * 获取用户权限数据
* @param $uid * @param $uid
* @return array * @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public function getAccess($uid) { public function getAccess(int $uid): array {
$isSupper = Tools::isAdministrator($uid); $isSupper = Tools::isAdministrator($uid);
if ($isSupper) { if ($isSupper) {
$access = AdminMenu::all(); $access = (new AdminMenu())->select();
$access = Tools::buildArrFromObj($access); $access = Tools::buildArrFromObj($access);
return array_values(array_filter(array_column($access, 'url'))); return array_values(array_filter(array_column($access, 'url')));
} else { } else {
$groups = AdminAuthGroupAccess::get(['uid' => $uid]); $groups = (new AdminAuthGroupAccess())->where('uid', $uid)->find();
if (isset($groups) && $groups->group_id) { if (isset($groups) && $groups->group_id) {
$access = (new AdminAuthRule())->whereIn('group_id', $groups->group_id)->select(); $access = (new AdminAuthRule())->whereIn('group_id', $groups->group_id)->select();
$access = Tools::buildArrFromObj($access); $access = Tools::buildArrFromObj($access);

View File

@ -17,7 +17,7 @@ class AdminAuth {
*/ */
public function handle($request, \Closure $next): Response { public function handle($request, \Closure $next): Response {
$header = config('apiadmin.CROSS_DOMAIN'); $header = config('apiadmin.CROSS_DOMAIN');
$ApiAuth = $request->header('apiAuth', ''); $ApiAuth = $request->header('Api-Auth', '');
if ($ApiAuth) { if ($ApiAuth) {
$userInfo = cache('Login:' . $ApiAuth); $userInfo = cache('Login:' . $ApiAuth);
$userInfo = json_decode($userInfo, true); $userInfo = json_decode($userInfo, true);

View File

@ -18,7 +18,7 @@ class AdminLog {
*/ */
public function handle($request, \Closure $next): Response { public function handle($request, \Closure $next): Response {
$userInfo = $request->API_ADMIN_USER_INFO; $userInfo = $request->API_ADMIN_USER_INFO;
$menuInfo = AdminMenu::get(['url' => $request->path()]); $menuInfo = (new AdminMenu())->where('url', $request->pathinfo())->find();
if ($menuInfo) { if ($menuInfo) {
$menuInfo = $menuInfo->toArray(); $menuInfo = $menuInfo->toArray();
@ -26,7 +26,7 @@ class AdminLog {
return json([ return json([
'code' => ReturnCode::INVALID, 'code' => ReturnCode::INVALID,
'msg' => '当前路由非法:' . $request->path(), 'msg' => '当前路由非法:' . $request->pathinfo(),
'data' => [] 'data' => []
])->header(config('apiadmin.CROSS_DOMAIN')); ])->header(config('apiadmin.CROSS_DOMAIN'));
} }
@ -36,7 +36,7 @@ class AdminLog {
'uid' => $userInfo['id'], 'uid' => $userInfo['id'],
'nickname' => $userInfo['nickname'], 'nickname' => $userInfo['nickname'],
'add_time' => time(), 'add_time' => time(),
'url' => $request->path(), 'url' => $request->pathinfo(),
'data' => json_encode($request->param()) 'data' => json_encode($request->param())
]); ]);

View File

@ -15,7 +15,7 @@ class WikiAuth {
*/ */
public function handle($request, \Closure $next) { public function handle($request, \Closure $next) {
$header = config('apiadmin.CROSS_DOMAIN'); $header = config('apiadmin.CROSS_DOMAIN');
$ApiAuth = $request->header('apiAuth', ''); $ApiAuth = $request->header('Api-Auth', '');
if ($ApiAuth) { if ($ApiAuth) {
$userInfo = cache('Login:' . $ApiAuth); $userInfo = cache('Login:' . $ApiAuth);
if (!$userInfo) { if (!$userInfo) {

View File

@ -85,12 +85,12 @@ class Tools {
/** /**
* 将查询的二维对象转换成二维数组 * 将查询的二维对象转换成二维数组
* @param array $res * @param $res
* @param string $key 允许指定索引值 * @param string $key 允许指定索引值
* @return array * @return array
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
public static function buildArrFromObj(array $res, string $key = ''): array { public static function buildArrFromObj($res, string $key = ''): array {
$arr = []; $arr = [];
foreach ($res as $value) { foreach ($res as $value) {
$value = $value->toArray(); $value = $value->toArray();
@ -106,8 +106,8 @@ class Tools {
/** /**
* 将二维数组变成指定key * 将二维数组变成指定key
* @param $array * @param array $array
* @param $keyName * @param string $keyName
* @return array * @return array
* @author zhaoxiang <zhaoxiang051405@gmail.com> * @author zhaoxiang <zhaoxiang051405@gmail.com>
*/ */
@ -129,7 +129,13 @@ class Tools {
* @param string $root * @param string $root
* @return array * @return array
*/ */
public static function listToTree(array $list, string $pk = 'id', string $pid = 'fid', string $child = 'children', string $root = '0'): array { public static function listToTree(
array $list,
string $pk = 'id',
string $pid = 'fid',
string $child = 'children',
string $root = '0'
): array {
$tree = array(); $tree = array();
if (is_array($list)) { if (is_array($list)) {
$refer = array(); $refer = array();
@ -152,8 +158,16 @@ class Tools {
return $tree; return $tree;
} }
/**
* 将层级数组遍历成一维数组
* @param array $list
* @param int $lv
* @param string $title
* @return array
* @author zhaoxiang <zhaoxiang051405@gmail.com>
*/
public static function formatTree(array $list, int $lv = 0, string $title = 'title'): array { public static function formatTree(array $list, int $lv = 0, string $title = 'title'): array {
$formatTree = array(); $formatTree = [];
foreach ($list as $key => $val) { foreach ($list as $key => $val) {
$title_prefix = ''; $title_prefix = '';
for ($i = 0; $i < $lv; $i++) { for ($i = 0; $i < $lv; $i++) {