У меня возникают проблемы при корректной работе одной из моих политик авторизации, в результате чего при попытке авторизации всегда возвращается значение 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()
в политике, и это даже не вызывать.
Вау, так что на самом деле это была опечатка на моем конце (типично!). В моем Comment
модель у меня случайно была строчная models
в моем пространстве имен, т.е. это было:
namespace App\models;
когда это должно было быть:
namespace App\Models;
Это только застало меня врасплох, потому что в моем контроллере у меня было:
use App\Models\Comment;
и destroy()
Метод вставляет комментарий, который на самом деле работал нормально, комментарий заполнялся как обычно. Кажется, что пути регистрации политики должны быть намного более точными, чем use
заявление.
Других решений пока нет …