【问题标题】:Getting user id from Posts table从 Posts 表中获取用户 ID
【发布时间】:2019-04-21 21:11:49
【问题描述】:

我有一个销毁帖子的路线,我怎样才能使可以访问该路线的人只有帖子创建者?例如,我有一个 id 为 3 且用户 id 为 5 的帖子,所以唯一可以删除 3 号的只有用户 id 5。我试过弄乱中间件,但没有幸运地让它工作。

CekStatus.php(中间件)

class CekStatus
{
    public function handle($request, Closure $next)
    {
        $userId = $request->id;
        $user = Post::where('id', $userId)->select('user_id')->pluck('user_id')->first();

        if ($user === Auth::id()) {
            return $next($request);
        }

        return redirect('/'); //redirect anyware.
    }
}

路线

Route::get('/hapus/{id}','PostController@destroy')->middleware('cekstatus');

内核.php

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cekstatus' => \App\Http\Middleware\CekStatus::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

输出:

ERR_TOO_MANY_REDIRECTS

【问题讨论】:

    标签: laravel eloquent laravel-5.8


    【解决方案1】:

    您应该在这里使用策略,中间件不用于授权目的。更多信息请参阅文档here

    文档也使用您的示例,您可以创建一个删除函数而不是更新,然后在您的控制器中使用它,您可以添加以下内容:

    if (auth()->user()->can('delete', $post)) {
        // delete it code here.
    }
    

    【讨论】:

    • 谢谢,但我仍然收到错误“调用成员函数 can() on null”
    • 这意味着您没有经过身份验证的用户登录
    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 2020-07-01
    • 2016-04-27
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2019-12-30
    • 2021-07-18
    相关资源
    最近更新 更多