Я создаю REST API с JWT
аутентификацией и авторизацией с собственной логикой. Он отлично работает. Теперь я хочу настроить маршруты динамически на основе ролей и разрешений. Предположим, у меня есть структура базы данных, например:
Роль:
id | name
1 | school
2 | transport
Права доступа:
id | name | controller | routes
1 | view-class-result | ApiController | getClassResult
2 | view-student-result | ApiController | studentResult
3 | download-student-result | ApiController | donwloadSchoolTemplate
Permission_role
role_id | permission_id
1 1
1 2
1 3
Теперь я хочу создать маршруты в соответствии с ролями и разрешением в базе данных.
В настоящее время мои маршруты выглядят так:
//All JWT authentication API goes here
Route::group(['middleware' => 'jwt.auth'], function() {
Route::get('user', '[email protected]');
Route::get('invalidate', '[email protected]');
//All authorized API goes here
Route::group(['middleware' => 'ability:school,view-class-result,true'], function() {
Route::post('classResult', '[email protected]');
});
Route::group(['middleware' => 'ability:school,view-student-result,true'], function() {
Route::post('studentResult', '[email protected]');
});
Route::group(['middleware' => 'ability:school,download-student-result,true'], function() {
Route::post('getStudentExamResult', '[email protected]');
});
});
Я не хочу, чтобы выше маршруты были жестко закодированы. Как я могу получить эти маршруты из базы данных. Что-то вроде ниже. Но не мог понять, как это сделать.
В файле маршрутов
$a = User:all();
foreach($a->roles as $value){
foreach($value->permission as $val){
Route::group(['middleware' => 'ability:{$value->name},{$val->name},true'], function() {
Route::post('{$val->controller}', '{$val->controller}@{$val->method}');
});
}
}
Спасибо.