🌟 Laravel Gate 完全指南
Gate 是 Laravel 中用于实现「权限控制」的核心工具。它可以判断:当前用户是否有权限执行某个操作。
✅ 一、基本概念
| 概念 | 说明 |
|---|---|
| Gate | 全局权限控制系统,基于能力(ability)进行判断 |
| Ability(能力) | 一个字符串名称,比如 'edit-post', 'manage_users' |
| 闭包规则 | 定义某个 ability 是否允许用户执行 |
| 与 Policy 区别 | Gate 更适合全局/简单逻辑;Policy 更适合资源类(如 Post、User)的 CRUD 权限 |
🧩 二、Gate 的 6 大核心用法
🔹 1. Gate::define() —— 定义一个权限规则
这是最基础的操作,在 App\Providers\AuthServiceProvider 的 boot() 方法中使用。
use Illuminate\Support\Facades\Gate;
Gate::define('manage_users', function ($user) {
return $user->hasRole('admin');
});
Gate::define('delete-post', function ($user, $post) {
// 用户是作者或管理员
return $post->user_id === $user->id || $user->isAdmin();
});
📌 注意:
- 第一个参数是
$user:当前登录用户 - 后续参数是可选模型(如
$post) - 返回
true/false表示是否允许
✅ 建议位置:AuthServiceProvider@boot
🔹 2. Gate::allows() / Gate::denies() —— 检查权限
在控制器、服务类、中间件等地方检查权限。
if (Gate::allows('manage_users')) {
// 可以管理用户
}
if (Gate::denies('delete-post', $post)) {
abort(403);
}
💡
allows()等价于 “can do”,denies()等价于 “cannot do”
🔹 3. Gate::check() —— 批量检查多个权限
支持同时检查多个 abilities,全部通过才返回 true。
// 是否同时具备两个权限?

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



