我正在开发一个允许用户登录的网站。所有用户有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 必须既是工人又是经理。我可以在我的观点中使用一些或,但我认为更好的解决方案是将用户类型设置为枚举或标志。但我真的不明白如何在我的过程中使用它。
我想知道每种方法的优点/缺点是什么,以及如何在@ura 中获得适当值的基本示例。