结论:voyager、laraadmin 和 orchid 是目前唯一真正落地稳定的白嫖型 laravel 后台权限方案;voyager 开箱即用 rbac,laraadmin 支持字段级权限,orchid 独有角色继承链,三者均适配 laravel 10 且无需手动拼逻辑。

直接说结论:能白嫖、真开箱即用、角色权限不靠手动拼逻辑的,目前只有 Voyager、LaraAdmin 和 Orchid 三者真正落地稳定,其余多数要么文档断档、要么 Laravel 版本卡在 9 以下、要么角色模型硬编码进视图里——你改个“编辑员不能删自己文章”这种规则,得翻七八个文件。
为什么 Voyager 是最省心的白嫖选择
它不是“模板”,是带完整 RBAC 后台的可运行系统,安装完就能跑角色分配界面,不用写一行策略(Policy)或中间件注册代码。
-
php artisan voyager:install --with-dummy后,/admin下自动出现「Roles」和「Users」管理页,角色可勾选「Browse/Read/Edit/Add/Delete」粒度权限,绑定到具体 BREAD 模块(比如只给「编辑员」开posts表的 Read/Edit,关 Delete - 权限判断走
$user->can('delete_post'),底层已把角色 → 权限映射塞进VoyagerRole模型,不需要你手写role_has_permissions中间表迁移 - 坑点注意:默认用
tcg/voyager的 1.7.x 分支(适配 Laravel 10),别装 dev-master —— 2026 年上半年有 commit 把Voyager::can()判空逻辑改崩了,报Call to a member function can() on null
LaraAdmin 适合需要字段级权限的场景
它把「某个角色能不能看到用户表里的 `last_login_at` 字段」这种需求做成可视化开关,不是靠改 Blade 模板隐藏 DOM,而是从查询层过滤字段。
- 角色配置页里点进任意模块(如
Users),能看到「Visible Fields」列表,取消勾选后,LAUser::fetchData()生成的 Eloquent 查询会自动去掉该字段,API 和表格都生效 - 菜单权限走
config/laraadmin.php的menu_permissions数组,但别手动改——用后台「Menu Manager」拖拽更安全,否则容易触发Undefined index: parent_id - 警告:它的
laravel-5.8分支已停止维护,必须用master(Laravel 10 兼容),且安装后务必运行php artisan la:install而非vendor:publish,否则LAConfigs表缺失导致角色页面 500
Orchid 是唯一支持「角色继承链」的免费方案
当你要实现「超级管理员 > 部门主管 > 小组长 > 普通成员」这种多级权限继承时,Voyager 和 LaraAdmin 都得靠前端隐藏按钮+后端重复校验,而 Orchid 原生支持 extends 关系。
- 定义角色时填
parent_id,比如team_lead的parent_id指向dept_head,那么team_lead自动继承dept_head的所有权限,无需额外调用$user->hasRole('dept_head') - 权限检查用
$user->hasAccess('platform.systems.users'),这个字符串是路由名,不是自定义字符串——必须和routes/platform.php里定义的as:名称完全一致,拼错一个字母就返回 false - 易踩坑:它的
orchid/platform包要求 PHP 8.2+,如果服务器还是 8.1,装完composer require orchid/platform会静默失败,日志里只显示PHP Warning: Module 'mbstring' already loaded,实际是版本不兼容
真正麻烦的从来不是装哪个包,而是角色权限一旦跨模型(比如「内容编辑」角色要能操作 posts、categories、media 三张表),所有白嫖方案都会暴露同一个问题:它们的权限注册机制只认字符串,不认 Eloquent 关系。你得自己在 App\Providers\AuthServiceProvider 里补 Gate::define,这时候「白嫖」就变成了「半白嫖」——模板省了 UI,没省掉业务逻辑的耦合深度。











