首页 > 解决方案 > Laravel - 限制用户的帖子数量

问题描述

有什么方法可以限制我项目中的用户的帖子数量。例如,我希望我的用户每个人最多可以创建 10 个帖子。所以一个用户有10个帖子?是有什么hasMany还是别的什么?请帮助找到解决方案。谢谢

标签: laravelpostmaxlimit

解决方案


根据定义

中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。

为了防止用户添加超过 10 个帖子,您需要创建一个中间件来保护您的posts/create路由

要创建新的中间件,请使用 make:middleware Artisan 命令:

php artisan make:middleware CheckUserPostsNumber

app/Http/Middleware此命令将在您的目录中放置一个新的 CheckUserPostsNumber 类。在这个中间件中,如果用户发布的数字 < 小于 10,我们将只允许访问该posts/create路由。否则,您会将用户重定向回主 URI:

<?php

namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;

class CheckUserPostsNumber
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::user()->posts->count() >= 10) {
            return redirect('home');
        }

        return $next($request);
    }
}

将中间件分配给路由

您想将中间件分配给特定的路由,您应该首先在 app/Http/Kernel.php 文件中为中间件分配一个键。默认情况下,该类的 $routeMiddleware 属性包含 Laravel 中包含的中间件的条目。要添加您自己的,请将其附加到此列表并为其分配您选择的键:

// Within App\Http\Kernel Class...

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    //...
    'checkUserPostsNumber' => 'App\Http\Middleware\checkUserPostsNumber'
];

一旦在 HTTP 内核中定义了中间件,您就可以使用中间件方法将中间件分配给路由:

Route::get('posts/create', function () {
    //
})->middleware('auth', 'checkUserPostsNumber');

文档


推荐阅读