Yii CUserIdentity против пользовательской модели - PullRequest
2 голосов
/ 18 сентября 2011

У меня есть хотя бы одна модель в моем проекте Yii, которая должна ссылаться на определенный идентификатор пользователя.В моем SQL для модели у меня есть что-то вроде CONSTRAINT FOREIGN KEY (user_id) REFERENCES User(id).Я собирался пойти дальше и создать модель User, когда натолкнулся на документы для CUserIdentity.Я должен признать, что я в замешательстве.Является ли CUserIdentity пользователем или состоянием, связанным с конкретным случаем пользователя?Я хотел бы использовать как можно больше встроенных функций Yii, поскольку они решают множество проблем, связанных с безопасностью, из того, что я понимаю, и я знаю о существовании некоторых модулей, таких как srbac, которые обрабатывают аутентификацию пользователей иуправление регистрацией.Пожалуйста, ведите меня в правильном направлении.(Также спорный вопрос: какова связь между моделями и компонентами?)

1 Ответ

6 голосов
/ 18 сентября 2011

Прежде всего, продолжайте и создайте модель User, она вам понадобится.

При этом исключается: CUserIdentity представляет концепцию «кто пользователь», в то время какмодель User представляет «информацию о пользователе моего приложения».CUserIdentity применимо во всех случаях, когда существует более одного типа пользователя (то есть гостя), тогда как модель User применима только тогда, когда вы сами храните информацию о пользователях.Следует признать, что в большинстве случаев оба будут применимы, и именно это создает путаницу.

Обычно отношение между ними таково: CUserIdentity, чтобы ответить на такие вопросы, как "кто "пользователь", "имеет ли пользователь доступ к этому ресурсу" и т. д. запрашивает модель User из базы данных, чтобы получить информацию, необходимую для ответа на эти вопросы.Эта связь между этими двумя понятиями также задокументирована в окончательном руководстве по Yii.Например, после аутентификации пользователя он может предоставить часть или всю информацию о модели User через свои собственные свойства (которые вы должны будете определить).

Чтобы привести пример сценария, в которомне модель User, подумайте о веб-сайте, который позволяет вам входить в систему, используя свою учетную запись LDAP.Когда вызывается метод CUserIdentity::authenticate, компонент аутентифицирует учетные данные на сервере LDAP и после успешной аутентификации снова получает любую другую соответствующую информацию и предоставляет ее через свои собственные свойства.

...