Я работаю над сайтом, который позволяет пользователям входить в систему. У всех пользователей 1 аккаунт, в аккаунте может быть много заказов. Пользователь может быть клиентом, работником или менеджером. Клиент никогда не является ни работником, ни менеджером. менеджер тоже рабочий. Я хотел бы представить дополнительные разделы страниц / параметры навигации в зависимости от типа пользователя, вошедшего в систему.
В настоящее время я использую набор логических значений, чтобы пометить пользователя как определенный тип, проверить это значение и выполнить некоторые блоки if / elsif, чтобы сгенерировать страницу, которую видит пользователь.
class User
include DataMapper::Resource
# ...
# various properties
# ...
property :client, Boolean
property :worker, Boolean
property :manager, Boolean
end
А затем я использую фильтр before для проверки типа пользователя и установки результата в качестве переменной.
before do
@user = session[:user]
if @user.client?
@ura = 'client'
elsif @user.worker?
@ura = 'worker'
elseif @user.manager?
@ura = 'manager'
end
end
Тогда, на мой взгляд, у меня есть @ura, чтобы поиграть. Мне кажется, что это уже создаст мне проблемы для менеджеров, потому что @ura должен быть и работником, и менеджером. Я мог бы использовать некоторые или в своих представлениях, но я думаю, что лучшим решением было бы установить тип пользователя как Enum или Flag. Но я не очень понимаю, как использовать это в моем процессе.
Я хотел бы знать, в чем заключаются преимущества / недостатки каждого из них, и основной пример того, как я могу получить соответствующее значение в @ ura.