【发布时间】:2020-06-26 10:42:35
【问题描述】:
我有一个位置模型,它包含两个属性:ID 和名称。
为了编辑这个模型,我设置了这条路线:
Route::get('administration/location/{location}/edit', 'LocationController@edit')->name('location.edit');
我设置了非常简单的权限:在AuthServiceProvider 我正在检查boot 方法如下
Gate::before(function ($user, $permission) {
if ($user->permissions->pluck('name')->contains($permission)) {
return true;
}
});
permission 是一个模型,其中包含一个 ID 和一个名称,通过 permission_user 表映射。
我已设置以下权限:
- edit_los_angeles
- edit_new_york
- edit_boston
- plenty_of_other_permissions_not_related_to_location
在所有这些杂乱无章之后,我的实际问题:
如何将这些权限与编辑位置相关联?
我面临的问题是,不允许给定用户编辑所有位置,但可能只允许编辑一个位置。只有拥有edit_los_angeles 权限的用户才能编辑名称为Los Angeles 的Location。
所以我不能把它组合成一个权限,比如edit_location,然后把它添加到我的路由->middleware('can:edit_location')。
相反,我想我需要这样的东西:
Route::get('administration/location/{location}/edit', 'LocationController@edit')->name('location.edit')->middleware('can:edit_los_angeles');
Route::get('administration/location/{location}/edit', 'LocationController@edit')->name('location.edit')->middleware('can:edit_new_york');
Route::get('administration/location/{location}/edit', 'LocationController@edit')->name('location.edit')->middleware('can:edit_boston');
...显然这行不通。
您会采取什么方法来解决这个难题? :-)
也许我做错了什么,有更好的 Laravel-Way 这样做吗?
非常感谢您提前提供的帮助!
我正在使用 Laravel 6.0 :-)
【问题讨论】:
-
我猜位置是模型?
-
是的,位置是一个模型:-)
-
我觉得有一个更通用的解决方案今晚会写一个解决方案。
-
感谢@mrhn 期待它:-)
-
位置和权限之间是否有任何绑定,或者您可以从名称中派生出它们吗?