5表关联权限控制

C层

步骤一:先根据登录的用户ID查询出权限

控制器:


/**
     * 登录接口
     * @param Request $request
     * @return \think\response\Json|void
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function login(Request $request){
        try {
            # 根据用户ID 查权限 controller action

            $data = $request->all();
            # 验证参数
            validate(\app\api\validate\Login::class)->check($data);
            $adminInfo = Db::table('admin')->where('username',$data['username'])->find();
            if ($adminInfo) {
                if ($adminInfo['password'] == $data['password']) {
                    # 根据用户id 查询当前用户对应的角色
                    #以及对应的权限
                    $adminInfo = \app\api\model\Admin::with(['role','role.auth'])->find($adminInfo['id'])->toArray();
                    # 处理数据
                    $authList = $adminInfo['role'][0]['auth'];
                    $authArr = [];
                    foreach ($authList as $value) {
                        $authArr[] = $value['auth_c'].'/'.$value['auth_a'];
                    }
                    # 把权限存入缓存
                    cache('auth_list',$authArr);

                    $data = [
                        'token' => Token::getToken($adminInfo['id'])
                    ];
                    return  success($data);
                } else {
                    return  fail('','密码错误',2001);
                }
            } else {
                # 手动抛出异常
                return  fail('','用户名不存在',2001);
            }
        }catch (ValidateException $exception){
            return  fail('',$exception->getError(),2001);
        }
    }

步骤二:实现控制
通过TP6中间间实现权限检测


 /**
     * 中间件验证token以及权限检测
     * @param $request
     * @param \Closure $next
     * @return mixed|\think\response\Json|void
     * @throws \Exception
     */
    public function handle($request, \Closure $next)
    {
        try {
            # 判断token是否存在、并且保证token是有效的才能访问
            #  获取token
            $token = Token::getRequestToken();
            if (!$token) {
                return  fail('','请先登录');
            }
            # 验证token
            $user_id = Token::getUserId($token);
            if (!$user_id) {
                return  fail('','token失效');
            }
            # 权限检测
            # controller()获取当前访问的控制器名a
            # action()获取当前访问的方法名
            $current = $request->controller().'/'.$request->action();
            $authList = cache('auth_list');# 获取缓存中的权限列表
            if (!in_array($current,$authList) && $user_id != 1) {
                return  fail('','无权限访问');
            }
             # token 认证成功、并且有权限访问

            return $next($request);

        }catch (RuntimeException $exception){
            return  fail('','token 无效');
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Security中,权限控制通常是通过定义一张用于存储用户角色和权限信息的来实现的。这张可以包含以下字段: 1. 用户:用于存储用户信息的,可以包含字段如下: - 用户ID:唯一标识用户的字段,通常使用自增长的整数类型。 - 用户名:用户的登录名,用于识别用户。 - 密码:用户的密码,通常需要进行加密存储。 2. 角色:用于存储角色信息的,可以包含字段如下: - 角色ID:唯一标识角色的字段,通常使用自增长的整数类型。 - 角色名称:角色的名称,用于标识角色。 3. 权限:用于存储权限信息的,可以包含字段如下: - 权限ID:唯一标识权限的字段,通常使用自增长的整数类型。 - 权限名称:权限的名称,用于标识权限。 4. 用户角色关联:用于关联用户和角色的,可以包含字段如下: - 关联ID:唯一标识关联关系的字段,通常使用自增长的整数类型。 - 用户ID:关联的用户ID。 - 角色ID:关联的角色ID。 5. 角色权限关联:用于关联角色和权限,可以包含字段如下: - 关联ID:唯一标识关联关系的字段,通常使用自增长的整数类型。 - 角色ID:关联的角色ID。 - 权限ID:关联权限ID。 通过这些的定义和关联,可以实现基于角色和权限的细粒度访问控制。在Spring Security中,可以使用注解或者配置文件来定义哪些角色可以访问哪些资源,并且Spring Security会根据用户的角色和权限进行验证和授权操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值