首页 文章

Laravel - 授权仅适用于Controller Method

提问于
浏览
0

我已经设置了我的模型策略,当我从控制器操作中授权操作时,它似乎正在工作 .

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

创建的策略只返回true或false,并且切换布尔似乎正在工作,因为我是基于它授权的 .

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

但是,我没有在控制器中的任何地方使用 authorize 方法,而是尝试在构造函数中设置中间件 .

Laravel文档显示了这个例子 .

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');
}

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

Bonus Information

我继续在我的策略中编写垃圾代码以引发语法错误,但仍然,我得到了未经授权的响应,告诉我我的策略根本没有触发 . 可能是我没有正确注册我的政策,但如上所述, $this->authorize(...) 按预期工作 .

1 回答

  • 1

    在您需要型号名称时,您似乎使用了模型的别名 . 在文件中说明:

    像create这样的动作可能不需要模型实例 . 在这些情况下,您可以将类名传递给中间件 . 类名将用于确定授权操作时使用的策略:

    您可以在此处找到更多信息: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');
    

相关问题