Политика авторизации 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() в политике, и это даже не вызывать.

3

Решение

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

namespace App\models;

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

namespace App\Models;

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

use App\Models\Comment;

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]