On this page
管理员权限验证
中间件 app/middleware/checkManagerToken.php
php
<?php
namespace app\middleware;
class checkManagerToken
{
public function handle($request, \Closure $next)
{
$tag = 'manager';
$model = '\\app\\model\\admin\\Manager';
// 获取用户信息
$token = $request->header('token');
// token不存在
if (!$token) return ApiException('非法token,请先登录!');
// 没有登录
$user = cms_getUser([
'token'=>$token,
'tag'=>$tag
]);
if (!$user) return ApiException('非法token,请先登录!');
// 成功,返回当前用户实例
// 当前用户实例
$request->UserModel = $model::find($user['id']);
// 当前用户已被禁用
if(!$request->UserModel->status){
return ApiException('当前用户已被禁用');
}
// 当前用户数据
$request->userInfo = $user;
// 验证当前用户权限(超级管理员无需验证)
if(!$request->UserModel->super){
if (!$request->UserModel->role->status) {
return ApiException('你所在角色组已被禁用');
}
$url = strtolower($request->controller().'/'.$request->action());
$r = (new $model)->hasRule($request->UserModel,$url,$request->method());
if(!$r){
return ApiException('你没有权限');
}
}
return $next($request);
}
}
自定义方法 app/common.php
php
/**
* 获取用户信息(token校验)
*
* @param array $param 参数配置(tag,token,password)
* @return void
*/
function cms_getUser(array $param){
$tag = getValByKey('tag',$param,'manager');
$token = getValByKey('token',$param);
$password = getValByKey('password',$param);
$user = \think\facade\Cache::store(config('cms.'.$tag.'.token.store'))->get($tag.'_'.$token);
if (!$password) unset($user['password']);
return $user;
}
路由 router/admin.php
php
// 需要验证权限
Route::group('admin',function(){
// ...
})->middleware(\app\middleware\checkManagerToken::class);