smashed-egg / laravel-auth-route-bindings
为 Laravel 添加对创建认证用户路由模型绑定的支持
1.1.0
2024-03-19 08:03 UTC
Requires
- php: ^8.0.2
- illuminate/console: ^9.21|^10.0|^11.0
- illuminate/contracts: ^9.21|^10.0|^11.0
- illuminate/support: ^9.21|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^7.6|^8.0|^9.0
- phpunit/phpunit: ^9.5|^10.0
This package is auto-updated.
Last update: 2024-09-19 09:05:16 UTC
README
Laravel Auth Route Bindings
此包允许您创建路由模型绑定,同时使用认证用户检索模型。
例如。您可能想要检查请求的 Post 模型是否属于已登录的用户。以前您可能做的是以下类似操作
Route::get('posts/{post}', function (Post $post) { abort_unless($post->user_id === auth()->user()->getAuthIdentifier()); return $post; });
或
Route::get('posts/{id}', function ($id) { $post = Post::where('user_id', auth()->user()->getAuthIdentifier())->findOrFail($id); return $post; });
或使用策略
<?php namespace App\Policies; use App\Models\Post; use App\Models\User; class PostPolicy { /** * Determine if the given post can be updated by the user. */ public function update(User $user, Post $post): bool { return $user->id === $post->user_id; } }
策略的缺点是它从数据库返回数据,填充模型,然后比较,在用户无权访问的情况下,然后被丢弃。
此包的优点在于逻辑全部在数据库级别完成。
要求
- PHP 8.0.2+
- Laravel 9.0+
安装
要安装此包,请运行
composer require smashed-egg/laravel-auth-route-bindings
支持我
您喜欢这个包吗?它是否提高了您的发展?考虑赞助以帮助未来的开发。
谢谢!
用法
您应该在 RouteServiceProvider 的 boot 方法开始处定义您的模型绑定。
例如
use App\Models\Post; use Illuminate\Support\Facades\Route; /** * Define your route model bindings, pattern filters, etc. */ public function boot(): void { Route::modelAuth('post', Post::class); // ... }
然后您可以在路由声明中使用它,就像使用其他模型绑定一样
Route::get('posts/{post}', function (Post $post) { return $post; });
您甚至可以使用范围绑定
Route::get('posts/{post}/comments/{comment}', function (Post $post, Comment $comment) { //.. })->scopeBindings();
因此,Post 必须属于认证的用户,Comment 必须属于 Post。