我有一个系统,管理员可以管理医生和医生有能力管理自己。为此,我使用Laravel Authorization策略。我为管理员注册了一个策略,它可以访问医生,例如:
Route::resource('doctors', 'DoctorsController')->middleware('can:access-doctors, App\Doctor');
但我需要的是一个单独的策略,只允许一条出资源组的路径,即
doctors.edit
这样医生就可以编辑自己的个人资料,比如:can:edit-doctor, $doctor
一些东西。是否有可能以正确的方式执行此操作,或者我必须制定手动路由并分配策略,而不是使用资源路由???
最佳答案
如果我没有错,您将需要一个不同的端点来为每个路由指定特定的中间件。
你可以:
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'));