Где лучше выполнять проверку прав пользователей - в 3-х уровневой системе?

Casey

Новичок
Где лучше выполнять проверку прав пользователей - в 3-х уровневой системе?

Вывод страниц сайта осуществляетя объектами-модулями, однако вся логика взаимодействия с БД вынесена в объекты-движки. Т.е. чтобы на сайте вывести новости объект-модуль вызвает метод объекта-движка и получает дату, текст и т.п. новостей, после чего оформляет вывод в html.

Вопрос - в каком объекте выполнять проверку на доступ к той или иной новости (ведь у разных пользователей разные права доступа - кому-то можно читать корпоративные новости, кому-то только общие) - в объекте-модули или в объекте-движке?

Реальная ситуация несколько сложнее, но пример что я описал очень здорово иллюстрирует проблему.

Опыта в подобных разработках у меня немного, хочется узнать мнение форумчан - как принятно поступать в таких случаях?
 

AmdY

Пью пиво
Команда форума
ты же сам написал, есть "объектами-модулям" для логики и "объекты-движки" для БД, так что не делай каши и дальше.
"объектами-модулям" - $news->check($resursId, $user);
"объекты-движки" - public function check($resursId, $user) - делает запрос к БД
 

Casey

Новичок
Логика по большей части как раз в движках реализована.
Например: при загрузке нового прайс-листа из xls он передаётся в движок в виде имени файла, а там парсится, заносится в БД и т.п.

Т.е. модули оперируют с "человеческими данными" - название проекта, id его участников, id засисимых проектов, а движок это как-то раскидывает по БД при добавлении/изменении и собирет в понятный и связанный вид при запросе данных.

Если делать проверки в модуле, то получается старт и финиш транзакций надо тоже в модуль выносить... Или же использовать одну общую транзакцию на одну выводимую страницу.

Спаисбо за ответ, буду думать дальше!
 

dimagolov

Новичок
Автор оригинала: Casey
Если делать проверки в модуле, то получается старт и финиш транзакций надо тоже в модуль выносить... Или же использовать одну общую транзакцию на одну выводимую страницу.
транзакция... на выводимую страницу...
это описка или если нет, то что подразумевается под транзакцией?
 

Casey

Новичок
Имеется в виду транзакция СУБД, в моём случае - используется mysql & innodb.

Т.е. сейчас у меня используются несколько транзакций на одной странице. Как вариант - использовать одну транзакцию на одну выводимую страницу, стартовать и финишировать её при старте и финише подсистемы взаимодействия с СУБД.
 

dimagolov

Новичок
Casey, у тебя при формировании каждой страницы модифицируется БД?
 

Casey

Новичок
dimagolov пожалуй нет. Примерно при 80% обращений. Система, которую я описываю - это больше корпоративный портал, нежели сайт.

Сложность в том, что проверка прав и действия, производимые на основании этой проверки должны быть внутри одной транзакции (в идеале), а ежели логика проверка_прав-запрос_на_действие реализованы в одном объекте, а сами действия в другом и не факт что одно обязательно повлечет за собой другое - то внутрь одной транзакци это можно запихнуть, только вызыв её старт из объекта-модуля, т.е. он получается должен знать о наличии БД как о хранилище данных, что не есть хорошо.

Мне видится хорошим решением 1 транзакция = 1 страница.
 
Сверху