Да, это может стать сложным, особенно если незарегистрированные пользователи могут делать что-то, но не все. Мы попробовали пару подходов для решения этой проблемы в компании, в которой я недавно работал, включая упомянутый вами вопрос о приглашениях.
Поскольку все наше приложение вращалось вокруг пользователей, когда пользователь посетил сайт, мы создали экземпляр пользователя. Если пользователь был подписан в пользовательской модели, будет поддерживаться запись базы данных, а если нет, они были просто виртуальным пользователем, и мы использовали данные сеанса для хранения информации о полупостоянном состоянии.
В application_controller мы устанавливаем current_user
либо реального пользователя или просто объект, поэтому он всегда был доступен, и проквакал как пользователь, особенно в том числе метод registered?
Сначала мы завернутые тонны материала в наших представлениях с if current_user.registered?
повсеместно. Но это быстро стало беспорядком. Лучшая модель (в случаях, когда различия были значительными) заключалась бы в создании частичных чисел, таких как _sidebar
и _sidebar_registered
, поэтому мы могли бы создать метод, который при корневом имени частичного рендеринга был бы соответствующим в зависимости от состояния пользователя.
В случае приглашений, когда пользователи имеют ограниченный доступ к контенту, если они были приглашены, мы написали модуль приглашения, который был подкреплен моделью. InvitER может отправить электронное письмо из системы или создать URL со встроенным токеном. Мы сохранили токен в таблице, чтобы мы знали, кто пригласил кого, что было необходимо в нашем случае, - поиск маркера - это все, что нужно для аутентификации. После того, как пользователь был аутентифицирован, мы сохранили состояние в сеансе, а метод User (invited?
) сообщит нам, есть ли у пользователя доступ.
В целом были определенные действия всего контроллера, которые могли регистрировать только зарегистрированные пользователи (например, редактировать/удалять), мы просто использовали бы before_filters в контроллере для контроля доступа. В основном, по мнению, все становится беспорядочным.
Мы рассмотрели CanCan, когда начали получать разные уровни авторизации пользователей.Но я могу вам сказать, что это может привести к довольно грубому коду быстро, если вы не будете тщательно разделять тех, кто может видеть и что делать.
Хороший подход. Вы когда-нибудь играли с использованием областей поддоменов или имен? –
Субдомены будут возиться с SEO - в нашем случае страница, которую незарегистрированный посетитель увидит, имеет практически тот же контент, что и зарегистрированный пользователь, поэтому должен быть один и тот же URL-адрес. Именованные области ... не так много: в конце было простое решение, принятое и сохраненное до первой страницы, к которой был обращен любой пользователь; в нашем случае это просто вопрос, сколько информации и какого вида зарегистрированный пользователь видел против нет. –
Хорошая мысль Я не думал о SEO. Швы как простые работы снова :) Спасибо –