50 lines
1.7 KiB
PHP
50 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace app\middleware;
|
|
|
|
use Closure;
|
|
use app\model\AuthRule;
|
|
use tauthz\facade\Enforcer;
|
|
use think\facade\Cache;
|
|
|
|
class Auth
|
|
{
|
|
public function handle($request, Closure $next)
|
|
{
|
|
$auth = session('auth');
|
|
if (!$auth) {
|
|
return redirect(url('manager.login/index'));
|
|
}
|
|
|
|
$module = 'manager';
|
|
$controller = unCamelize(request()->controller());
|
|
$controller = str_replace($module.'.', '', $controller);
|
|
$controller = str_replace('.', '/', $controller);//兼容多层级目录 如 /manager/test/article/index
|
|
$action = unCamelize(request()->action());
|
|
$roles = Enforcer::getRolesForUser($auth['user_id']);
|
|
// $per = Enforcer::getPermissionsForUser($roles[0]);
|
|
// var_dump($controller);
|
|
// var_dump($action);
|
|
// var_dump($roles);
|
|
// var_dump($per);
|
|
// exit;
|
|
// return $next($request);//暂时停用权限校验
|
|
// var_dump($controller);
|
|
// var_dump($action);
|
|
// var_dump(Enforcer::hasPermissionForUser(1, $controller, 'group-make'));exit;
|
|
|
|
foreach ($roles as $role) {
|
|
// TODO 关注批量权限检测是否可用
|
|
//只需要有一个角色具有权限就放通 此处第一个参数不是用户 而是 角色 此方法是检测用户|角色是否具有某个权限的公用方法
|
|
if (Enforcer::hasPermissionForUser($role, $controller, $action)) {
|
|
return $next($request);
|
|
}
|
|
}
|
|
|
|
if (request()->isAjax()) {
|
|
return json(['code' => 4001, 'msg' => '没有权限']);
|
|
} else {
|
|
return view('/manager/error/jump')->assign('msg', '很抱歉,您还没有权限,请联系管理员开通!');
|
|
}
|
|
}
|
|
} |