smashed-egg/laravel-auth-route-bindings

为 Laravel 添加对创建认证用户路由模型绑定的支持

1.1.0 2024-03-19 08:03 UTC

This package is auto-updated.

Last update: 2024-09-19 09:05:16 UTC


README

Laravel Auth Route Bindings

Latest Stable Version Downloads this Month

此包允许您创建路由模型绑定,同时使用认证用户检索模型。

例如。您可能想要检查请求的 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。