代码之家  ›  专栏  ›  技术社区  ›  Noman Ur Rehman

Laravel-授权仅从控制器方法起作用

  •  1
  • Noman Ur Rehman  · 技术社区  · 7 年前

    // create action
    public function create()
    {
        $this->authorize('create', BusinessProfile::class);
        return view('business-profile.create');
    }
    

    create的策略只返回true或false,切换布尔值似乎可以正常工作,因为我根据它获得了授权。

    这符合我的政策设置正确。

    authorize 方法,我尝试在构造函数中设置中间件。

    Route::post('/post', function () {
        // The current user may create posts...
    })->middleware('can:create,App\Post');
    

    所以,我在我的控制器构造函数中写了这个。

    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('can:create,BusinessProfile')->only('create');
    }
    

    但是,执行此操作时,操作始终未经授权。

    奖金信息

    $this->authorize(...) 按预期工作。

    1 回复  |  直到 7 年前
        1
  •  1
  •   M_Idrees    7 年前

    似乎您在模型中使用了别名,而它需要模型名称。在文件状态下:

    某些操作(如创建)可能不需要模型实例。在这些 名称将用于确定授权时要使用的策略 行动:

    https://laravel.com/docs/5.4/authorization#policy-methods

    因此,在控制器构造函数中,这一行:

    $this->middleware('can:create,BusinessProfile')->only('creat‌​e'); 
    

    将成为:

    $this->middleware('can:create,App\BusinessProfile')->only('c‌​reate');