Борьба с решением о том, как лучше всего обрабатывать проверку подлинности на уровне клиента со следующей иерархией модели:
Клиент -> Магазин -> Продукт (персонал, оборудование и т. Д.)
... где у Клиента есть много магазинов, у магазина много продуктов (есть много сотрудников, есть много оборудования и т. Д.)
Я установил связь HABTM между пользователем и клиентом, которая является простой и доступной через сеанс аутентификации или статический метод в модели пользователя при необходимости (см. Описание afterFind ниже).
Прямо сейчас я колеблюсь между оценкой результатов в обратном вызове afterFind каждой модели, проверкой связи с Клиентом на основе модели, которую я запрашиваю у Клиентов, членом которых является текущий Пользователь. то есть, если текущей моделью является Клиент, проверьте идентификатор; если текущей моделью является Store, отметьте Store.clientid и, наконец, если Product, получите родительский Store из Item.storeid и соответственно отметьте Store.clientid.
Однако, чтобы соответствовать нормальному MVC, я возвращаю true или false из afterFind, а затем должен проверить возвращение из вызывающего действия - это нормально, но я никак не могу определить, как определить если Model-> find (или Model-> read и т. д.) возвращает false из-за неверного идентификатора в find или из-за разрешений клиента в afterFind; это также означает, что мне придется также изменять каждое действие.
Другой метод, с которым я играл, состоит в том, чтобы оценить запрос в app_controller.beforeFilter и, разбив запрос на controller / action / id, я могу затем запросить соответствующую модель (ы) и оценить поля по Массив Auth.User.clients для определения, имеет ли Пользователь доступ к запрошенному Клиенту. Это кажется нормальным, но не оставляет мне никакого способа (контроллера) для обработки / controller / index - кажется логичным, что результаты индекса будут отражать членство клиента.
Недостатки в обоих включают длинный список условных «правил», которые мне нужно разбить, чтобы определить, где находится текущая модель / действие / идентификатор в контексте клиента. В общем, оба чувствуют себя немного ломкими и запутанными для меня.
Есть ли третий вариант, на который я не смотрю?