Как вы работаете с сущностью пользователя и ее статусом подключения?

В настоящее время я работаю над проектом с Zend Framework и Doctrine 2, я очень доволен обоими этими инструментами, но мне интересно, как работать с этим специальным объектом User, который совместно использует данные базы данных, данные сеанса (авторизация, параметры, acl и т.д..)

Я часто вижу такую ​​реализацию:

if (User::isConnected())

Проблема для меня в том, что мой класс User является объектом, который используется Doctrine, ну, это не проблема, но он может добавить некоторую бизнес-логику, если у моего User есть какая-то сложная роль и/или привилегии.

Кстати, я не знаю почему (просто предчувствие, может быть, неправильное), но это не похоже на хорошую идею, я почти уверен, что у нее есть конструктивные ограничения.

В настоящее время моя идея состоит в том, чтобы использовать UserService, я уже пытаюсь использовать такой слой для другого моего объекта, и это выглядит действительно интересно.

Как насчет чего-то вроде:

$service = new UserService($entityManager);
if ($service->isUserConnected($user)) 

Это может позволить мне использовать другую службу, например IdentificationService, которая может сохранять «пользователя» (или любой другой «ресурс», который может быть авторизован) в сеансе и проверять авторизацию.

То же самое можно применить к AuthorizationService с помощью такого метода, как:

$service->isAuthorized($user, $resource, $action)

Есть ли у вас какие-либо отзывы о такой реализации? И/или какие-нибудь примеры?

о чем ты думаешь?

Спасибо.


person JohnT    schedule 13.05.2011    source источник


Ответы (1)


Вы правы, если думаете о каком-то сервисе, отдельном от вашей сущности пользователя, для управления этим материалом. Сущность не должна знать о доступе к данным и т. д.

Взгляните на Zend_Auth. Вам понадобится создать Zend_Auth_Adapter для работы с Doctrine2. Небольшое гугление выявило этот пример, который может оказаться поучительным. Zend_Auth удобен и прост, и прекрасно работает с элементами Zend_Acl. для управления авторизацией после аутентификации пользователей.

person timdev    schedule 14.05.2011