Я пытаюсь найти эффективное и гибкое решение RBAC для своего приложения. Я провел небольшое исследование и думаю, что создал следующее.
В моей модели User у меня есть:
...
public function role() {
return $this->belongsToMany('App\Models\Role', 'user_roles');
}
public function hasRole($role) {
if($this->role->where('name', $role)->first())
return true;
}
...
И пример использования:
Route::group(['middleware' => 'auth'], function () {
Route::get('/dashboard', function () {
if (Auth::user()->hasRole('Sales')) {
return view('dashboards/sales');
} else {
return 'Don\'t know where to send you :(';
}
});
});
Разрешения назначаются ролям, но разрешения не проверяются в приведенном выше примере. Затем роли назначаются пользователям, и пользователь может иметь много ролей.
Я делаю то, что я делал, масштабируемое и эффективное решение RBAC?