Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Имею следующую схему данных
-Users. Таблица с данными пользователей
-Journals. Таблица со списком журналов.
-Entries. Таблица со списком записей в журналах.
-journal_user. Журнал могут вести разные пользователи. Таблица описывает права. Только те пользователи, которым указаны в этой таблице для определённого журнала, могут его вести.
Связь от Users к Entries. Каждая запись в журнале принадлежит определённому пользователю.
Есть Journal, который могут заполнять Entries определённые Users. Каждая Entry принадлежит определённому User. И только пользователь, который сделал эту Entry может её редактировать. Имеется необходимость в следующих ограничениях:
Для определённого Journal только определённые Users могут оставлять Entries. Остальные Users не должны иметь никаких прав на работу с Journals и Entries.
Только тот User, который оставил Entry (при условии, что он всё ещё имеет права на работу с журналом, т.е. присутствует в таблице journal_user) может редактировать её. Остальные доверенные пользователи (из таблицы journal_user для текущего Journal) могут только читать.
Я не знаю, как подступиться к описанным выше требованиям к ограничениям. Самое удобное - сделать ограничение подобное на стороне middleware, который бы использовался в качестве middleware для группы роутов в web.php. И если с пользователем понятно (я могу получить его данные через Auth::user()), то как быть с Journal?
Route::get('journals/{journal}', 'JournalController@show')->name('journals.show');
Нужно проверить, что пользователь может открыть этот журнал. Значит на стороне middleware нужно как-то получить переданный параметр роута {journal}. Как это можно сделать?
Насчёт возможности редактирования только своей записи я вроде бы понимаю - реализовать можно через Request и валидацию (есть там метод auth). Но как быть с выше описанным? Это можно сделать как-то иначе? Да, я могу в каждом методе контроллеров проверять, но это же не правильно, да?
Не в сети
Я не знаю как у вас реализован роут, но в middleware можно достать все что нужно через $request (Illuminate\Http\Request)
public function handle(Request $request, Closure $next) {
$journal = $request->route('journal');
}
Изменено lodar (02.06.2019 23:17:47)
Не в сети
Страницы 1