Контроль доступа в DDD ?

Обсуждаем, как правильно строить приложения
Ответить
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Контроль доступа в DDD ?

Сообщение sda »

Необходимо дать пользователям разные права на сайте. Если использовать инструменты фреймворка, то при миграции на другой фреймворк, управление правами и сами права нужно будет делать заново.
Наверное хотелось бы иметь некий Proxy сервис, через который бы шли все вызовы к application layer и который бы внутри проверял можно пользователю вызвать метод application сервиса или нельзя. Но я не понимаю, в каком слое такой Proxy сервис может существовать и вообще верное ли это направление? Presentation ? Application? Если application, то не странно ли, что один application сервис решает как вызывать другие сервисы того же слоя? Помогите разобраться, как правильно сделать контроль доступа ?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Контроль доступа в DDD ?

Сообщение samdark »

Если планируется миграция — завернуть в какой-либо класс необходимо, да. Я заворачиваю и просто для удобства.

https://github.com/samdark/yiipowered/b ... ssions.php
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Контроль доступа в DDD ?

Сообщение anton_z »

samdark писал(а): 2017.03.31, 11:37 Если планируется миграция — завернуть в какой-либо класс необходимо, да. Я заворачиваю и просто для удобства.

https://github.com/samdark/yiipowered/b ... ssions.php
В примере статика. А в заголовке топика есть три волшебных буквы) Идея верна, но надо делать без статики, в виде stateless-сераиса. Иначе инжектить не сможете.
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Контроль доступа в DDD ?

Сообщение anton_z »

sda писал(а): 2017.03.31, 06:02 Необходимо дать пользователям разные права на сайте. Если использовать инструменты фреймворка, то при миграции на другой фреймворк, управление правами и сами права нужно будет делать заново.
Наверное хотелось бы иметь некий Proxy сервис, через который бы шли все вызовы к application layer и который бы внутри проверял можно пользователю вызвать метод application сервиса или нельзя. Но я не понимаю, в каком слое такой Proxy сервис может существовать и вообще верное ли это направление? Presentation ? Application? Если application, то не странно ли, что один application сервис решает как вызывать другие сервисы того же слоя? Помогите разобраться, как правильно сделать контроль доступа ?

Доменный сервис у вас будет. Какой-нибудь AceessManager. В домене его объявите интерфейсом, в инфраструктуре реализация поверх yii-rbac.
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Контроль доступа в DDD ?

Сообщение sda »

Меня еще угнетает необходимость писать отдельные пермишены под каждый метод и добавлять их в базу данных. Потом еще не забывать удалять их из базы, если они больше не актуальны.

Вообще я немного подумал и для фронтенда контроль доступа мне вроде как не нужен. Нужен для админ. панели. Но для неё вроде достаточно обычного CRUD. Что-то вроде создания форм по данным из базы и раздача прав на чтение/создание/изменение/удаление. Django говорят это умеет автоматически делать без ручного вмешательства, но к сожалению не знаком с python, чтобы посмотреть исходники и понять, как там это работает.
Ответить