oyaw/tp5-rbac

基于gmars/tp5-rbac库,这个扩展是基于thinkPHP5框架的RBAC权限验证的扩展。使用本扩展能够快速的将RBAC权限控制器模块引入到自己的系统中。原则上本模块适合于任何PHP框架但是由于使用了thinkPHP5的特性所以使用composer安装到其他框架时需要做相应的修改。模块所需要的扩展库可以通过thinkPHP5的migration来做数据迁移。

v1.0 2021-06-16 10:20 UTC

This package is not auto-updated.

Last update: 2025-06-12 22:49:08 UTC


README

>本扩展包是tp5.0的rbac包,使用了部分tp5.0的特性实现了关系型数据库中特殊数据结构的处理。

安装方法

先安装composer如果不知道怎么安装使用composer请自行百度。 打开命令行工具切换到你的tp5.0项目根目录

composer require oyaw/tp5-rbac

如果该方法报错请按照以下方式操作:

  1. 打开项目根目录下的composer.json
  2. 在require中添加"oyaw/tp5-rbac": "dev-master"
  3. 运行composer update

添加后composer.json应该有这样的部分:

    {
        "require": {
            "php": ">=5.6.*",
            "topthink/framework": "^5.0",
            "oyaw/tp5-rbac": "master"
        }
    }

配置

请将此配置加在application/config.php的配置中

    // +----------------------------------------------------------------------
    // | RBAC设置,rbac模块配置依赖
    // +----------------------------------------------------------------------
    'rbac' => [
        // 验证方式 jwt(token方式)形式或者service(基于cookie)方式
        'type' => 'jwt',
        // rbac要使用的数据库配置为空则为默认库(生成表的前缀依赖此配置)
        'db' => [
            // 数据库表前缀
            'prefix' => 'tp5_rbac_',
            // 数据库类型
            'type' => 'mysql',
            // 服务器地址
            'hostname' => '127.0.0.1',
            // 数据库名
            'database' => 'db_demo',
            // 用户名
            'username' => 'root',
            // 密码
            'password' => '',
            // 端口
            'hostport' => '',
        ],
        // 密码加密密钥
        'salt_token' => 'ab9f8e11fac29739451b243b5d2f93e8',
        // 权限缓存前缀
        'permission_cache_prefix' => '_RBAC_PERMISSION_CACHE_'
    ],

使用说明

实例化rbac

$rbac = new Rbac();

管理操作

初始化rbac所需的表

//可传入参数$db为数据库配置项默认为空则为默认数据库(考虑到多库的情形)
$rbac->createTable();

该方法会生成rbac所需要的表,一般只执行一次,为了安全,执行后会加锁,下次要执行需要删除锁文件再执行。

创建权限分组

$rbac->savePermissionCategory([
    'name' => '用户管理组',
    'description' => '网站用户的管理',
    'status' => 1
]);

编辑和修改调用同一个方法编辑时请在参数中包含主键id的值

创建权限节点

$rbac->createPermission([
    'name' => '文章列表查询',
    'description' => '文章列表查询',
    'status' => 1,
    'type' => 1,
    'category_id' => 1,
    'path' => 'article/content/list',
]);
  • 如果为修改则在传入参数数组中加入主键id的键值
  • type为权限类型1为后端权限2为前端权限主要考虑到spa使用
  • category_id为上一步创建的权限分组的id
  • 创建成功返回添加的该条权限数据,错误抛出异常

    创建角色&给角色分配权限

    $rbac->createRole([
      'name' => '内容管理员',
      'description' => '负责网站内容管理',
      'status' => 1
    ], '1,2,3');
    
  • 如果修改请在第一个参数中传入主键的键值
  • 第二个参数为权限节点的id拼接的字符串请使用英文逗号

给用户分配角色

$rbac->assignUserRole(1, [1]);
  • 该方法会删除用户之前被分配的角色
  • 第一个参数为用户id
  • 第二个参数为角色id的数组

    获取权限分组列表

    $rbac->getPermissionCategory([['status', '=', 1]]);
    
  • 参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有

获取权限列表

$rbac->getPermission([['status', '=', 1]]);
  • 参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有

获取角色列表

$rbac->getRole([], true);
  • 第一个参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有
  • 第二个参数选择是否查询角色分配的所有权限id默认为true

删除权限分组

$rbac->delPermissionCategory([1,2,3,4]);
  • 参数支持传入单个id或者id列表

删除权限

$rbac->delPermission([1,2,3,4]);
  • 参数支持传入单个id或者id列表

删除角色

$rbac->delRole([1,2,3,4]);
  • 参数支持传入单个id或者id列表
  • 删除角色会删除给角色分配的权限[关联关系]

验证操作

service方式

service方式因为要用到session一般要依赖于cookie。在用户登录后要获取用户权限操作

$rbac->cachePermission(1);
  • 传入参数为登录用户的user_id
  • 该方法会返回该用户所有的权限列表

用户请求时进行验证

$rbac->can('article/channel/list');
  • 如果有权限返回true如果没有权限返回false

    jwt方式

    jwt方式在前后端分离结构用的比较普遍。在用户登录后需要获取token

    $rbac->generateToken(1);
    
  • 第一个参数为登录的用户id
  • 第二个参数为token有效期默认为7200秒
  • 第三个参数为token前缀 返回结果为
    array(3) {
    ["token"] => string(32) "4c56b80f06d3d8810b97db33a1291694"
    ["refresh_token"] => string(32) "17914241bde6bfc46b20e643b2c58279"
    ["expire"] => int(7200)
    }
    

    使用refresh_token刷新权限

    $rbac->refreshToken('17914241bde6bfc46b20e643b2c58279');
    

    请在有效期内使用refresh_token来刷新授权 用户请求时验证

$rbac->can('article/channel/list');

鸣谢

作者:魏永强 < hayixia606@163.com>

地址:https://github.com/gmars/tp5-rbac