Laravel 策略不会自动应用于模型

根据 Laravel 文档,如果遵循命名约定,策略应该被自动发现:它应该放在目录中Policies,它的名称应该是模型名称加上单词Policy,模型应该在app目录中。就我而言,这一切都是正确的,但该政策不起作用。


型号名称是Screen。该政策被命名为ScreenPolicy:


class ScreenPolicy

{

    use HandlesAuthorization;


    /**

     * Create a new policy instance.

     *

     * @return void

     */

    public function __construct()

    {

        //

    }


    public function delete(User $user, Screen $screen)

    {

        return false;    //always return false for testing

    }

}

在我的控制器中,我有以下删除 a 的方法Screen:


public function delete(Request $request) {

    $screen = Screen::find($request->screen_id);

    $screen->delete();

    ...

}

我的期望是我不应该能够删除此处Screen,因为该策略始终返回 false,但是Screen通过调用此方法已成功删除。我究竟做错了什么?


慕容3067478
浏览 107回答 1
1回答

月关宝盒

您仍然需要调用 authorize()。$screen = Screen::find($id);if ($this->authorize('delete', $screen)) {   $screen->delete();}
打开App,查看更多内容
随时随地看视频慕课网APP