外观
LIMS RBAC 快速开始
5 分钟快速上手
1. 运行同步(首次)
bash
# 同步 Legacy 数据到 RBAC 表
php artisan lims:rbac-sync
# 验证同步结果
php artisan lims:rbac-verify2. User Model 混入 Trait
php
<?php
namespace App\Models;
use App\Foundation\Rbac\Concerns\HasLimsPermissions;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasLimsPermissions; // 添加这一行
}3. 三种使用方式
方式 1:User Model Trait(推荐)
php
$user = Auth::user();
// 检查权限
if ($user->hasPermission('sample.add')) {
// 有权限
}
// 检查菜单
if ($user->canViewMenu(123)) {
// 可见
}方式 2:Facade
php
use App\Foundation\Rbac\Facades\LimsRbac;
// 检查当前用户
if (LimsRbac::check('sample.add')) {
// 有权限
}
// 检查指定用户
if (LimsRbac::userCan($userId, 'sample.add')) {
// 有权限
}方式 3:Laravel Gate(自动集成)
php
// 控制器
$this->authorize('sample.add');
// Blade
@can('sample.add')
<button>添加</button>
@endcan4. 路由保护
php
// 单个权限
Route::get('/sample', [SampleController::class, 'index'])
->middleware('lims.permission:sample.view');
// 多个权限(OR)- 分号分隔
Route::post('/sample', [SampleController::class, 'store'])
->middleware('lims.permission:sample.add;sample.edit');
// 多个权限(AND)- 最后加 ;and
Route::delete('/sample/{id}', [SampleController::class, 'destroy'])
->middleware('lims.permission:sample.delete;sample.manage;and');注意:使用分号(;)而非逗号分隔多个权限。
5. Blade 模板
blade
{{-- 检查权限 --}}
@permission('sample.add')
<button>添加样品</button>
@endpermission
{{-- 检查菜单 --}}
@canViewMenu(123)
<a href="/sample">样品管理</a>
@endcanViewMenu完整示例
控制器
php
<?php
namespace App\Http\Controllers;
use App\Foundation\Rbac\Facades\LimsRbac;
use Illuminate\Http\Request;
class SampleController extends Controller
{
public function __construct()
{
$this->middleware('lims.permission:sample.view')->only(['index']);
}
public function index()
{
// Laravel Gate 鉴权
$this->authorize('sample.view');
return view('sample.index');
}
public function store(Request $request)
{
// Facade 鉴权
if (!LimsRbac::check('sample.add')) {
abort(403);
}
// 业务逻辑
}
}Blade 视图
blade
<div class="container">
<h1>样品管理</h1>
@permission('sample.add')
<a href="{{ route('sample.create') }}" class="btn btn-primary">
添加样品
</a>
@endpermission
<table>
@foreach($samples as $sample)
<tr>
<td>{{ $sample->name }}</td>
<td>
@can('sample.edit')
<a href="{{ route('sample.edit', $sample) }}">编辑</a>
@endcan
@permission('sample.delete')
<button onclick="deleteSample({{ $sample->id }})">删除</button>
@endpermission
</td>
</tr>
@endforeach
</table>
</div>配置
开发环境(推荐)
env
# .env
RBAC_ENFORCE=false # 不拦截,仅供测试
RBAC_CACHE_TTL_MINUTES=10生产环境
env
# .env
RBAC_ENFORCE=true # 启用拦截
RBAC_CACHE_TTL_MINUTES=10常用命令
bash
# 同步权限
php artisan lims:rbac-sync
# 验证同步结果
php artisan lims:rbac-verify
# 清除配置缓存
php artisan config:clear
# 测试服务加载
php artisan tinker
> app(\App\Foundation\Rbac\Contracts\PermissionChecker::class)清除缓存
php
// 清除当前用户缓存
Auth::user()->clearPermissionCache();
// 清除指定用户缓存
use App\Foundation\Rbac\Facades\LimsRbac;
LimsRbac::clearUserCache($userId);文档链接
故障排查
权限检查不生效?
- 检查
RBAC_ENFORCE是否为 true - 运行
php artisan lims:rbac-sync同步数据 - 清除缓存:
Auth::user()->clearPermissionCache()
Blade 指令不工作?
- 检查
LimsRbacServiceProvider是否已注册 - 运行
php artisan config:clear - 重启开发服务器
中间件 403?
- 检查用户是否已登录
- 检查权限代码是否正确
- 查看日志:
storage/logs/laravel.log
下一步
- 阅读使用指南。
- 需要同步或核对 Legacy 数据时,阅读同步规范。
- 调整基础实现前,阅读Foundation 架构。