Laravel Policy

0

Używam route model binding i policy w Laravel i w jednym przypadku mi to działa natomiast w drugim już nie

//CommentPolicy
 public function delete(User $user, Comment $comment)
    {
        return $user->id === $comment->user_id;
    }
//CommentController
public function destroy(Comment $comment)
    {
        $this->authorize('delete', $comment);
        $comment->delete();
    }
//AuthServiceProvider
 protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
        Article::class => ArticlePolicy::class,
        Comment::class => CommentPolicy::class
    ];

w przypadku artykułów wszystko działa poprawnie natomiast w przypadku komentarzy. Jeśli mój kontroler wygląda w sposób jak powyżej (z autoryzacja) otrzymują informację

This action is unauthorized.

kiedy usunę linijkę odpowiedzialną za autoryzację kod się wykonuje jednak z bazy rekord nie zostaje usunięty.

0

Po pierwsze metody powinny się nazywać tak samo. W jednym masz delete w drugim destroy, w obu musi być to samo, by kod się wykonał. Taka sama nazwa i parametry.

0

Zmieniłem na

//CommentController
public function destroy(Comment $comment)
    {
        $this->authorize('destroy', $comment);
        $comment->delete();
    }
//CommentPolicy
public function destroy(User $user, Comment $comment)
    {
        return $user->id === $comment->user_id;
    }

i dalej otrzymuję

"This action is unauthorized."
0

dalej... po co wywołujesz $this->authorize ? Prawidłowo zrobione policy wykonuje się samo automatycznie.

0

ok, to już teraz działa, kod się wykonuje prawidłowo jednak rekord nie zostaje usunięty z bazy

0

Odpal debuggera i sprawdź czy rzeczywiście ten rekord przychodzi ci tam, poza tym czy czasem nie masz włączonego soft delete?

0

uruchomiłem debugger i coś mi tu nie pasuje

{
                    "connection": "mysql",
                    "query": "delete from `replies` where `replies`.`comment_id` is null and `replies`.`comment_id` is not null;",
                    "time": 0.34
                }

próbuję usunąć rekord z tabeli replies gdzie powinien usuwać z tabeli comments

0

też jeśli zrobię to w ten sposób

Comment::where('id', 1)->delete();

wszystko działa poprawnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1