我想授权我的Laravel应用程序的API。我现在的结构是这样的:
用户属于组织,组织有许多(可以说是)对象。现在我只想……
策略方法应匹配您传递给控制器的参数。看起来你传递的是id Organization 在路线,但你正试图检查 Object 关于政策。
Organization
Object
https://laravel.com/docs/5.7/authorization#via-middleware
您可以利用Laravel的隐式模型绑定将组织注入控制器,如下所示:
路线:
Route::get('organizations/{organization}/objects','ObjectController@indexOrganization')->middleware('auth:api', 'can:view,organization');
政策:
public function view(User $user, Organization $organization) { return $user->organization_id === $organization->id; }
控制器:
public function indexOrganization(Organization $organization) { ... }
请注意 {organization} 在路线匹配 organization 在里面 ->middleware() 呼叫,匹配 $organization 在政策和控制器。
{organization}
organization
->middleware()
$organization