Skip to content
关注公众号,获取新课通知

管理员权限验证


中间件 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);