@alexIvanov1994

Где нужно проверять права доступа?

Здравствуйте.

Где нужно проверять права доступа?

К примеру есть class Book, там есть метод remove, нормально ли проверять права на удалении в методе класса или это не правильно?

Это нужно делать в контроллере?

К примеру мне нужно получить название книги, но доступ к этой информации имеет только тот, кто создал книгу (Информация о создатели находится в поле user_id)
Если права доступа проверять в контроллере, то получается надо сначала сделать 1 запрос в БД для получения поля user_id, после если запрос отправил владелец книги, то обращаемся уже к методу класса
и там еще 1 запрос в бд для вытаскивания нужных полей (В примере это название книги).

В таком случаи вместо 1 запроса к БД, получаем 2.
Когда можно обойтись одним и вытащить сразу все нужные данные: user_id и title

Сейчас это сделано так:
Обращаемся к маршруту /book/ajax/, проверяем на валидность отправленные данные и после обращаемся к классу, где проверяется на права удаления книги и само удаление книги

Как будет правильно это реализовать?
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
middleware, который будет проверять права на каждом запросе будет правильным решением.
Но можно и сделать финт ушами (хотя решение и не красивое и не масштабируемое):
Delete from `table` where user_id = 'ваш пользователь' and book_id = 'Ваша книжка';

Естественно, что удалить может только владелец.
Ну, а дальше анализировать результат выполнения запроса: если ничего не удалено, выдавать ошибку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы