Skip to content

权限验证

jwt配置

配置在 app/config/superadminx.php的jwt 中,支持多应用配置,token支持存到mysql或redis中,支持同一用户多端登录

如何使用
php
<?php
//引入jwt
use app\utils\Jwt;

//加密生成token
$token = Jwt::generateToken('admin_pc', $adminUser);

//解密获取用户
$adminUser = Jwt::getUser('admin_pc');

app/middleware/JwtAdmin.php 后端权限验证中间件

主要做两件事,判断用户是否登录,判断是否对某个接口具有权限

1.判断是否登录

写后台控制器的时候(写api的控制器的时候也是如此),增加两个属性:$onLogin,$noNeedLogin,在中间件里面会通过反射来获取当前请求控制器中这两个属性的值,来判断当前请求的方法是否需要登录,则进行鉴权是否已登录,鉴权成功后当前登录的用户会放到 $request->adminUser 中,在后续程序中可以直接使用

查看代码
php
<?php
namespace app\admin\controller;

use support\Request;
use support\Response;
use app\common\logic\AdminUserLogic;

/**
 * 管理用户
 * 
 * @author zy <741599086@qq.com>
 * @link https://www.superadminx.com/
 * */
class AdminUser
{
    //此控制器是否需要登录
    protected $onLogin = true; 
    //不需要登录的方法
    protected $noNeedLogin = ['Logout']; 

}

2.接口级别的鉴权

比如当前请求的是AdminUser控制器的getList方法,访问接口就是/admin/AdminUser/getList,在后端增加菜单或权限节点的时候,如新增一个权限节点的名称为adminUserGetList,那么后端此方法的注释中增加 @auth adminUserGetList ,那么中间件在鉴权的时候会判断当前请求方法的注释中是否有@auth 属性,则代表是否需要进行接口的权限验证,则会判断用户所在角色中是否拥有adminUserGetList的权限

查看代码
php
<?php
namespace app\admin\controller;

use support\Request;
use support\Response;
use app\common\logic\AdminUserLogic;

/**
 * 管理用户
 * 
 * @author zy <741599086@qq.com>
 * @link https://www.superadminx.com/
 * */
class AdminUser
{
    //此控制器是否需要登录
    protected $onLogin = true;
    //不需要登录的方法
    protected $noNeedLogin = ['Logout'];

    /**
     * 获取列表
     * @method get
     * @auth adminUserGetList
     * @param Request $request 
     * @return Response
     */
    public function getList(Request $request): Response
    {
        $list = AdminUserLogic::getList($request->get());
        return success($list);
    }
}