4

我有一个系统,管理员可以管理医生,医生有能力管理自己。为此,我使用Laravel 授权策略。我为管理员注册了一项政策,它可以访问以下医生:

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

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

是否有可能以适当的方式做到这一点,或者我必须手动路由并分配策略而不是使用资源路由???

4

1 回答 1

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'));
于 2018-10-03T13:35:35.160 回答