Laravel中“资源”路由的不同策略

时间:2018-10-03 12:21:55

标签: php laravel routes acl policies

我有一个系统,管理员可以在其中管理医生,而医生也可以自行管理。为此,我正在使用Laravel Authorization使用策略。我为管理员注册了一项政策,可以像这样访问医生

Route::resource('doctors', 'DoctorsController')->middleware('can:access-doctors, App\Doctor');

但是我需要的是针对资源组(即doctors.edit)中的一条路由的单独策略,以便医生可以编辑自己的个人资料,例如:can:edit-doctor, $doctor

是否有可能以适当的方式执行此操作,或者我必须进行手动路由并分配策略,而不是使用资源路由?

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,您将需要一个不同的端点来为每个路由指定特定的中间件。

您可以这样做:

Route::get('doctors/{doctor}/edit', 'DoctorsController@edit')
    ->middleware('can:edit-doctor', 'App\Doctor'));

Route::put('doctors/{doctor}', 'DoctorsController@update')
    ->middleware('can:edit-doctor', 'App\Doctor'));

Route::resource('doctors', 'DoctorsController')
    ->except(['edit', 'update'])
    ->middleware('can:access-doctors, App\Doctor'));