Как вы работаете с сущностью пользователя и ее статусом подключения? - PullRequest
0 голосов
/ 13 мая 2011

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

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

if (User::isConnected())

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

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

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

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

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

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

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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 14 мая 2011

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

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

...