Получение идентификатора пользователя из таблицы сообщений - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть маршрут для уничтожения Поста, как я могу сделать так, чтобы тот, кто может получить доступ к маршруту, был только создателем Поста? Например, у меня есть сообщение с идентификатором № 3 и идентификатором пользователя 5, поэтому единственный, кто может удалить номер 3, - это только идентификатор пользователя 5. Я пытался связываться с промежуточным ПО, но мне не повезло, чтобы заставить его работать.

CekStatus.php (Middleware)

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');

Kernel.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

1 Ответ

1 голос
/ 22 апреля 2019

Вы должны использовать Политику здесь, промежуточное программное обеспечение не используется в целях авторизации. Подробнее об этом в документации здесь .

Документы также используют ваш пример, вместо обновления вы можете создать функцию удаления, а затем, чтобы использовать ее в вашем контроллере, вы можете добавить это:

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