我已经设置了我的模型策略,当我从控制器操作中授权操作时,它似乎正在工作。
// create action
public function create()
{
$this->authorize('create', BusinessProfile::class);
return view('business-profile.create');
}
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');
}
但是,执行此操作时,操作始终是未经授权的。
奖励信息
我继续在我的策略中编写垃圾代码以引发语法错误,但仍然会收到未经授权的响应,告诉我我的策略根本没有触发。可能是我没有正确注册我的政策,但如上所述,$this->authorize(...)
按预期工作。
答案 0 :(得分:1)
在您需要型号名称时,您似乎使用了模型的别名。在文档陈述:
像create这样的动作可能不需要模型实例。在这些 在这种情况下,您可以将类名传递给中间件。班级 name将用于确定授权时使用的策略 行动:
您可以在此处找到更多信息:https://laravel.com/docs/5.4/authorization#policy-methods
所以在控制器构造函数中这一行:
$this->middleware('can:create,BusinessProfile')->only('create');
将成为:
$this->middleware('can:create,App\BusinessProfile')->only('create');