掌握 Laravel 中的授权:Gates 与策略类 ??
在现代 Web 应用程序中,控制谁可以访问或修改资源至关重要。例如,在博客应用程序中,您可能希望确保只有帖子的所有者才能编辑或删除它。 Laravel 提供了两种优雅的方式来处理授权:Gates 和 Policy Classes。本指南将引导您完成这两种方法,向您展示如何保护您的资源并确保应用程序的安全。
Laravel 的盖茨?
Gate 提供了一种快速而直接的方法来使用闭包处理授权。它们非常适合简单的授权检查,并在 AuthServiceProvider 中定义。
设置门
让我们定义一个门来确保只有帖子所有者才能更新或删除帖子:
-
定义 Gate:打开 AuthServiceProvider 并添加您的 Gate 定义:
// app/Providers/AuthServiceProvider.php use Illuminate\Support\Facades\Gate; use App\Models\Post; public function boot() { $this->registerPolicies(); Gate::define('update-post', function ($user, Post $post) { return $user->id === $post->user_id; }); Gate::define('delete-post', function ($user, Post $post) { return $user->id === $post->user_id; }); }
-
应用门:在控制器方法中使用门来强制执行授权逻辑:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use App\Models\Post; public function update(Request $request, Post $post) { if (Gate::denies('update-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with updating the post } public function destroy(Post $post) { if (Gate::denies('delete-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with deleting the post }
盖茨的优点和缺点
优点:
- 简单:使用最少的代码即可快速设置。 ⚡
- 简单的理想选择:非常适合单一资源应用程序或简单的场景。 ?
缺点:
- 可扩展性:随着应用程序的增长,可能会变得麻烦且难以管理。 ?
- 维护:如果组织不好,可能会变得混乱。 ?
最佳用例:需要快速授权检查的小型应用程序或简单用例。 ?
Laravel 中的策略类?️
策略类提供了一种更加结构化和可扩展的方法来处理授权。它们提供了一种清晰的方法来管理复杂的授权规则并保持代码井井有条。当使用包含标准 CRUD 操作的资源控制器时,策略特别有用:index、create、edit、update 和 摧毁。
创建和使用策略
-
生成策略:使用 Artisan 创建策略类:
php artisan make:policy PostPolicy
-
定义策略方法:打开生成的策略类并添加方法来处理每个操作的授权:
// app/Policies/PostPolicy.php namespace App\Policies; use App\Models\User; use App\Models\Post; class PostPolicy { /** * Determine if the user can view the list of posts. * * @param User $user * @return bool */ public function viewAny(User $user) { // Example logic to allow viewing posts for authenticated users return true; } /** * Determine if the user can create a post. * * @param User $user * @return bool */ public function create(User $user) { return true; } /** * Determine if the user can update the post. * * @param User $user * @param Post $post * @return bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; } /** * Determine if the user can delete the post. * * @param User $user * @param Post $post * @return bool */ public function delete(User $user, Post $post) { return $user->id === $post->user_id; } }
-
使用策略:在控制器操作中应用策略方法:
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use App\Models\Post; public function update(Request $request, Post $post) { $this->authorize('update', $post); // Proceed with updating the post } public function destroy(Post $post) { $this->authorize('delete', $post); // Proceed with deleting the post }
策略类别的优缺点
优点:
- 组织:提供一种干净且有组织的方式来处理复杂的授权逻辑。 ?
- 可维护性:随着应用程序的增长,更容易管理和维护。 ?️
- 框架支持:利用 Laravel 的内置框架支持来实现一致的授权。 ?
缺点:
- 初始设置:与门相比,设置稍微多一些。 ⚙️
- 复杂性:对于非常简单的授权场景可能有点过头了。 ?
最佳案例场景:非常适合具有复杂授权要求的应用程序或目标是干净、可维护的代码。 ?
概括
Laravel 中的 Gates 和 Policy 类都提供了处理授权的强大方法。门非常适合快速、简单的检查,而策略类提供了管理复杂场景的结构化方法,特别是在具有 index、create、edit、更新和销毁。选择最适合您的应用程序需求的方法,并享受安全、组织良好的代码库! ??
以上是Laravel 中的授权 - 初学者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),