A modern Laravel 12+ RBAC package with data permissions and auto-sync features.
shiwuhao/laravel-rbac is a Laravel package for a modern laravel 12+ rbac package with data permissions and auto-sync features..
It currently has 1 GitHub stars and 1.930 downloads on Packagist (latest version v1.4.1).
Install it with composer require shiwuhao/laravel-rbac.
Discover more Laravel packages by shiwuhao
or browse all Laravel packages to compare alternatives.
Last updated
现代化的 Laravel 12+ RBAC 扩展包,采用 Action 模式架构,提供完整的基于角色的访问控制(RBAC)和数据权限管理功能。
| 文档 | 说明 | |------|------| | 完整使用指南 | 详细的 API 使用、路由配置、权限管理等 | | 命令行工具 | Artisan 命令详解和使用示例 | | 快速开始 | 安装配置和基本用法 | | 更新日志 | 版本变更记录 |
| Package | Laravel | PHP | |---------|---------|---------| | 2.0.x | 12.x | >= 8.2 |
composer require shiwuhao/laravel-rbac
# 发布所有文件
php artisan vendor:publish --provider="Rbac\RbacServiceProvider"
# 或者分别发布
php artisan vendor:publish --tag=rbac-config
php artisan vendor:publish --tag=rbac-migrations
php artisan vendor:publish --tag=rbac-routes
php artisan migrate
Action 是一个独立的业务逻辑单元,每个 Action 负责一个具体的业务操作。
// 路由直接绑定 Action
Route::post('/roles', CreateRole::class);
Route::put('/roles/{id}', UpdateRole::class);
composer require shiwuhao/laravel-rbac
php artisan vendor:publish --provider="Rbac\RbacServiceProvider"
php artisan migrate
在 .env 中配置:
RBAC_USER_MODEL=App\Models\User
或在 config/rbac.php 中配置:
'models' => [
'user' => \App\Models\User::class,
],
use Rbac\Traits\HasRolesAndPermissions;
class User extends Authenticatable
{
use HasRolesAndPermissions;
}
use Rbac\Actions\Role\CreateRole;
// 创建角色
$role = CreateRole::handle([
'name' => '管理员',
'slug' => 'admin',
]);
💡 更多详细用法请查看 → 完整使用指南
use Rbac\Actions\Role\CreateRole;
$role = CreateRole::handle([
'name' => '管理员',
'slug' => 'admin',
]);
use Rbac\Actions\Permission\CreatePermission;
$permission = CreatePermission::handle([
'name' => '创建用户',
'slug' => 'user:create',
]);
// 代码中
if (auth()->user()->hasPermission('user:create')) {
// 有权限
}
// Blade 模板中
@permission('user:create')
<button>创建用户</button>
@endpermission
// 路由中间件
Route::get('/users', [UserController::class, 'index'])
->middleware('permission:user:view');
📖 详细 API 文档 → 完整使用指南
🔧 命令行工具 → Artisan 命令
use Rbac\Actions\DataScope\CreateDataScope;
// 创建简单数据范围
$scope = CreateDataScope::handle([
'name' => '部门数据',
'type' => 'department',
]);
// 创建带动态表达式的自定义数据范围
$scope = CreateDataScope::handle([
'name' => '最近30天数据',
'slug' => 'recent-30-days',
'type' => 'custom',
'config' => [
'rules' => [
['field' => 'created_at', 'operator' => '>=', 'value' => '@now-30d:date'],
['field' => 'status', 'operator' => 'IN', 'value' => ['active', 'pending']],
],
'logic' => 'AND',
],
'description' => '只能访问最近30天的活跃数据(运行时动态计算)',
]);
自定义数据范围支持在 config 中使用动态表达式,运行时自动解析:
时间表达式:
'@now' // 当前时间
'@now-30d' // 30天前
'@now-3M' // 3个月前
'@now-1y' // 1年前
'@now+7d' // 7天后
'@now-30d:date' // 30天前(仅日期)
'@now-30d:timestamp' // 30天前(时间戳)
用户属性表达式:
'@user.id' // 当前用户ID
'@user.department_id' // 用户部门ID
'@user.organization_id' // 用户组织ID
使用示例:
// 限制只能访问自己部门最近一周的数据
CreateDataScope::handle([
'name' => '本部门本周数据',
'type' => 'custom',
'config' => [
'rules' => [
['field' => 'department_id', 'operator' => '=', 'value' => '@user.department_id'],
['field' => 'created_at', 'operator' => '>=', 'value' => '@now-7d:datetime'],
],
'logic' => 'AND',
],
]);
use Rbac\Actions\Permission\CreateInstancePermission;
// 为特定文章创建权限
$permission = CreateInstancePermission::handle([
'resource' => 'article',
'resource_id' => 123,
'action' => 'update',
]);
use Rbac\Actions\BaseAction;
class CustomAction extends BaseAction
{
protected function rules(): array
{
return ['name' => 'required|string'];
}
protected function execute(): mixed
{
return $this->context->data('name');
}
}
📖 更多高级用法 → 完整使用指南
# 扫描并生成权限节点
php artisan rbac:scan-permissions
# 清除权限缓存
php artisan rbac:clear-cache
# 查看权限统计
php artisan rbac:permission-stats
🔧 完整命令列表 → 命令行工具文档
主要配置项:
return [
// 自定义用户模型
'models' => [
'user' => \App\Models\User::class,
],
// API 路由配置
'api' => [
'enabled' => true,
'prefix' => 'api/rbac',
'middleware' => ['api', 'auth:sanctum'],
],
];
📖 完整配置说明 → 完整使用指南
MIT License. 详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!