PHPackages                             lihq1403/think-rbac - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. lihq1403/think-rbac

ActiveThink-extend

lihq1403/think-rbac
===================

thinkphp-rbac

1.0.4(5y ago)43821MITPHPPHP &gt;=7.0

Since Jun 24Pushed 5y agoCompare

[ Source](https://github.com/lihq1403/think-rbac)[ Packagist](https://packagist.org/packages/lihq1403/think-rbac)[ RSS](/packages/lihq1403-think-rbac/feed)WikiDiscussions master Synced today

READMEChangelog (10)Dependencies (3)Versions (18)Used By (0)

 think-rbac
============

[](#-think-rbac-)

 thinkphp6的rbac权限控制系统 基于mysql

安装
--

[](#安装)

1、首先用composer安装

```
$ composer require lihq1403/think-rbac:^1.0
```

2、发布资源

```
$ php think lihq1403:rbac-publish
```

会生成一个rbac.php的配置文件在config目录下

```
    /**
     * 用户表，这是我的示例，要改成你们自己的
     * 用来做关联的，所以一定要有
     */
    'user_model' => \app\common\models\AdminUser::class,

    /**
     * 是否忽略未定义的权限
     */
    'skip_undefined_permission' => true,

    /**
     * 可以跳过权限验证的 模块-控制器-方法
     */
    'continue_list' => [
        'module' => ['admin'],
        'controller' => ['test'],
        'action' => ['test']
    ],
```

3、数据迁移

```
$ php think lihq1403:rbac-migrate
```

然后就会发现数据库多了5张表，表字段具体内容可看代码

```
rbac_role  角色 表
rbac_user_role 用户角色 中间表
rbac_permission_group 权限组 表
rbac_permission 权限规则 表
rbac_role_permission_group 角色权限组 中间表
rbac_log 请求日志 表

```

4、使用

在你需要用到权限的用户model里面，引入`use RbacUser;`

```
如
namespace app\common\model;

use think\Model;
use Lihq1403\ThinkRbac\traits\RbacUser;

class AdminUser extends Model
{
    /**
     * 超级管理员id，该id的管理员拥有最高权限
     */
    const SUPER_ADMINISTRATOR_ID = 1;

    use RBACUser;
}

```

这样就算是可以开始使用了

直接使用
----

[](#直接使用)

提供了controller，只需要定义路由就好了，比如

```
// rbac 管理
Route::group('rbac', function () {

    // 角色管理
    Route::post('role', 'Lihq1403\ThinkRbac\controller\RBACController@addRole'); // 添加角色
    Route::put('role', 'Lihq1403\ThinkRbac\controller\RBACController@editRole'); // 修改角色
    Route::delete('role', 'Lihq1403\ThinkRbac\controller\RBACController@delRole'); // 删除角色
    Route::get('roles', 'Lihq1403\ThinkRbac\controller\RBACController@getRoles'); // 角色列表
    Route::get('role/permission-group', 'Lihq1403\ThinkRbac\controller\RBACController@roleHoldPermissionGroup'); // 角色拥有的权限列表
    Route::post('role/change-permission-group', 'Lihq1403\ThinkRbac\controller\RBACController@diffPermissionGroup'); // 角色更换的权限列表

    // 权限组管理
    Route::post('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@addPermissionGroup'); // 权限组新增
    Route::put('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@editPermissionGroup'); // 权限组编辑
    Route::delete('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@delPermissionGroup');// 权限组删除
    Route::get('permission_groups', 'Lihq1403\ThinkRbac\controller\RBACController@getPermissionGroups'); // 权限组列表

    // 权限管理
    Route::post('permission', 'Lihq1403\ThinkRbac\controller\RBACController@addPermission'); // 权限新增
    Route::put('permission', 'Lihq1403\ThinkRbac\controller\RBACController@editPermission'); // 权限编辑
    Route::delete('permission', 'Lihq1403\ThinkRbac\controller\RBACController@delPermission'); // 权限删除
    Route::get('permissions', 'Lihq1403\ThinkRbac\controller\RBACController@getPermissions'); // 权限列表

    // 管理员管理
    Route::post('admin-user/role', 'Lihq1403\ThinkRbac\controller\RBACController@userAssignRoles'); // 给管理员分配角色
    Route::delete('admin-user/role', 'Lihq1403\ThinkRbac\controller\RBACController@userCancelRoles'); // 给管理员删除角色
    Route::post('admin-user/sync-role', 'Lihq1403\ThinkRbac\controller\RBACController@userSyncRoles'); // 同步管理员角色

    // 日志管理
    Route::get('logs', 'Lihq1403\ThinkRbac\controller\RBACController@getLog'); // 获取日志
});
```

自定义使用
-----

[](#自定义使用)

### 实例化

[](#实例化)

```
$rbac = new Rbac();
// 或者使用门面
\Lihq1403\ThinkRbac\facade\RBAC::addPermissionGroup();
```

### 权限组

[](#权限组)

##### 增加权限组

[](#增加权限组)

```
$rbac->addPermissionGroup('用户管理', 'user_manager', '用户管理权限组');
```

##### 编辑权限组

[](#编辑权限组)

```
$rbac->editPermission(1, ['name' => '用户列表111']);
```

##### 删除权限组

[](#删除权限组)

```
$rbac->delPermission(1);
```

### 角色

[](#角色)

##### 添加角色

[](#添加角色)

```
$rbac->addRole('用户管理的管理员', '描述');
```

##### 编辑角色

[](#编辑角色)

```
$rbac->editRole(1, ['name' => '用户管理的管理员']);
```

##### 删除角色

[](#删除角色)

```
$rbac->delRole(1);
```

##### 禁用角色

[](#禁用角色)

```
$rbac->closeRole(2);
```

##### 获取所有角色，分页显示

[](#获取所有角色分页显示)

```
$rbac->getRoles($map = [], $field = [], $page = 1, $page_rows = 10);

返回结果是分页的
array(3) {
  ["page"] => int(1)
  ["total"] => int(1)
  ["list"] => array(1) {
    [0] => array(6) {
      ["id"] => int(2)
      ["name"] => string(24) "用户管理的管理员"
      ["description"] => string(2) "11"
      ["create_time"] => string(19) "2019-06-27 14:02:34"
      ["update_time"] => string(19) "2019-06-27 14:02:34"
      ["status"] => int(0)
    }
  }
}
```

##### 获取角色所有权限组，已拥有和未拥有

[](#获取角色所有权限组已拥有和未拥有)

```
$rbac->roleHoldPermissionGroup(2);

返回结果
array(3) {
  [0] => array(5) {
    ["id"] => int(4)
    ["name"] => string(12) "用户管理"
    ["description"] => string(21) "用户管理权限组"
    ["code"] => string(12) "user_manager"
    ["hold"] => int(0) // 1是 0否
  }
  [1] => array(5) {
    ["id"] => int(5)
    ["name"] => string(3) "111"
    ["description"] => string(0) ""
    ["code"] => string(2) "11"
    ["hold"] => int(0)
  }
  [2] => array(5) {
    ["id"] => int(6)
    ["name"] => string(12) "用户列表"
    ["description"] => string(0) ""
    ["code"] => string(2) "22"
    ["hold"] => int(1)
  }
}
```

### 角色-权限组

[](#角色-权限组)

##### 分配权限

[](#分配权限)

```
$rbac->assignPermissionGroup(2, 'user_manager');
第二个参数不填，则添加所有权限组
```

##### 收回权限

[](#收回权限)

```
$rbac->cancelPermissionGroup(2,['user_manager']);
第二个参数不填，则收获所有权限组
```

##### 修改角色权限，已有未被选择会被删除，未有已选择会新增

[](#修改角色权限已有未被选择会被删除未有已选择会新增)

```
$rbac->diffPermissionGroup(2, [22]);
```

### 用户-角色

[](#用户-角色)

##### 先查找用户

[](#先查找用户)

```
$user = AdminUser::get(1);
```

##### 分配角色

[](#分配角色)

```
$user->assignRoles([1,2,3]);
```

##### 收回角色

[](#收回角色)

```
$user->cancelRoles([1,2,3]);
```

##### 差值分配角色

[](#差值分配角色)

```
$user->diffRoles([1,2,3]);
```

##### 用户所有角色

[](#用户所有角色)

```
$user->allRoles();
返回结果
array(1) {
  [0] => array(3) {
    ["role_id"] => int(2)
    ["name"] => string(24) "用户管理的管理员"
    ["description"] => string(2) "11"
  }
}
```

### 权限检查 传入用户id，一般配合中间件来使用

[](#权限检查-传入用户id一般配合中间件来使用)

```
$rbac->can(1);

如果没有权限，会抛出Lihq1403\ThinkRbac\exception\ForbiddenException异常
```

例子

```
    /**
     * rbac中间件
     * @param Request $request
     * @param \Closure $next
     * @return mixed
     * @throws ForbiddenException
     */
    public function handle(Request $request, \Closure $next)
    {
        $uid = AdminAuth::uid();

        // 超级管理员不需要进行权限控制
        if ($uid !== AdminUser::SUPER_ADMINISTRATOR_ID) {
            // 检查权限
            try {
                RBAC::can($uid);
            } catch (\Lihq1403\ThinkRbac\exception\ForbiddenException $exception){
                throw new ForbiddenException($exception->getMessage());
            }
        }

        // 记录日志
        RBAC::log($uid);

        return $next($request);
    }
```

### 日志相关

[](#日志相关)

##### 保存日志

[](#保存日志)

```
$rbac->log(1);

传入用户id记录
```

##### 日志列表获取

[](#日志列表获取)

```
$rbac->getLogList(1,10);

结果如下格式：
array(1) {
  ["page"] => int(1)
  ["total"] => int(1)
  ["list"] => array(1) {
    [0] => array(8) {
      ["id"] => int(3)
      ["user_id"] => int(1)
      ["method"] => string(3) "GET"
      ["path"] => string(16) "api/admin/noAuth"
      ["ip"] => string(12) "192.168.56.1"
      ["input"] => object(stdClass)#255 (1) {
        ["hhh"] => string(1) "2"
      }
      ["create_time"] => string(19) "2019-07-10 15:23:12"
      ["user"] => array(2) {
        ["id"] => int(1)
        ["username"] => string(5) "admin"
      }
    }
  }
}
```

Contributing
------------

[](#contributing)

You can contribute in one of three ways:

1. File bug reports using the [issue tracker](https://github.com/lihq1403/think-rbac/issues).
2. Answer questions or fix bugs on the [issue tracker](https://github.com/lihq1403/think-rbac/issues).
3. Contribute new features or update the wiki.

*The code contribution process is not very formal. You just need to make sure that you follow the PSR-0, PSR-1, and PSR-2 coding guidelines. Any new code contributions must be accompanied by unit tests where applicable.*

License
-------

[](#license)

MIT

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~22 days

Recently: every ~41 days

Total

17

Last Release

2163d ago

Major Versions

0.1.6 → 5.1.x-dev2019-10-18

0.2.0 → 1.0.02019-12-25

1.0.4 → 6.0.x-dev2020-06-09

### Community

Maintainers

![](https://www.gravatar.com/avatar/9e0ed12e0a107565d6a1bb00bcd6d6c90a18ec5d1c6d0c7dddeee64b54f96bc4?d=identicon)[lihq1403](/maintainers/lihq1403)

---

Top Contributors

[![lihq1403](https://avatars.githubusercontent.com/u/25847339?v=4)](https://github.com/lihq1403 "lihq1403 (10 commits)")

### Embed Badge

![Health badge](/badges/lihq1403-think-rbac/health.svg)

```
[![Health](https://phpackages.com/badges/lihq1403-think-rbac/health.svg)](https://phpackages.com/packages/lihq1403-think-rbac)
```

###  Alternatives

[zoujingli/think-library

Library for ThinkAdmin

8569.8k18](/packages/zoujingli-think-library)[jaguarjack/catchadmin

The CatchAdmin Background management

8962.6k](/packages/jaguarjack-catchadmin)[casbin/think-authz

An authorization library that supports access control models like ACL, RBAC, ABAC for ThinkPHP.

27918.5k6](/packages/casbin-think-authz)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
