Политика авторизации Laravel не вызывается

У меня возникают проблемы с правильным выполнением одной из моих политик авторизации, в результате чего попытка авторизации всегда возвращает false. Я просто заставляю функцию возвращать true для тестирования. Я использую Laravel 5.4, вот моя функция политики:

public function can_modify_or_delete(User $user, Comment $comment)
{
    return true;
}

в моем AuthServiceProvider.php файл, который я добавил CommentPolicy к моей действующей политике регистрации.

protected $policies = [
    'App\Models\Post' => 'App\Policies\PostPolicy',
    'App\Models\Comment' => 'App\Policies\CommentPolicy',
];

как ни странно, эта политика почты работала просто отлично. Кажется, что комментарий либо не регистрируется, либо вызывается неправильно.

В моих маршрутах:

Route::delete('/comments/{comment}', 'CommentsController@destroy');

и в CommentsController

public function destroy(Request $request, Comment $comment)
{   
    $this->authorize('can_modify_or_delete', $comment);
    $comment->delete();

    return response(['status' => 'Comment deleted'], 200);
}

К сожалению, несмотря ни на что, эта проверка авторизации возвращает false. Я что-то пропустил? Проверено довольно тщательно для опечаток и не смог найти ни одного. Я также подтвердил, что привязка модели маршрута работает должным образом, поэтому это не пустая проблема с ресурсами. Я старался dd() в политике, и это даже не вызывать.

1 ответ

Вау, так что на самом деле это была опечатка с моей стороны (типично!). В моем Comment модель у меня случайно была строчная models в моем пространстве имен, т.е. это было:

namespace App\models;

когда это должно было быть:

namespace App\Models;

Это только застало меня врасплох, потому что в моем контроллере у меня было:

use App\Models\Comment;

и destroy() метод вставляет комментарий, который на самом деле работал нормально, комментарий заполнялся как обычно. Кажется, что пути регистрации политики должны быть намного более точными, чем use заявление.

Другие вопросы по тегам