所以我想做的是根据current_user
.
这就是我所拥有的:
path = case current_user.roles.where(:name => "vendor")
when :vendor
dashboard_path
when :guest
home_path
else
home_path
end
redirect_to path
我正在使用cancan
,并且据我所知,找出用户角色的唯一方法是执行current_user.has_role? :admin
或current_user.roles.where(:name => role_name)
.
鉴于这些限制(或告诉我另一种方式来确定用户的角色),我如何让这个案例陈述起作用?
编辑 1
假设我正在检查多个角色,而不仅仅是我这里的 2 个 - 可能是 4 个或 5 个。
编辑 2
需要明确的是,这是我目前的设置。
我正在使用 Devise、CanCan 和 Rolify。Rolify 允许用户拥有多个角色,但我的应用程序不会有那个用例。一个用户将只有一个角色。它们可以是vendor, buyer, guest, superadmin
.
如果他们是 a vendor
,他们只能看到dashboard_path
属于他们的那个。他们看不到vendor storefront
属于其他任何人的任何其他人。他们也不应该能够看到其他供应商的产品。因此,一旦他们登录,他们不root_path
应该是其他所有角色的角色。dashboard_path
home_path
root_path
如果他们是guest
,他们可以看到除价格之外的所有内容 - 我已经有了这个逻辑。我是这样实现的:
if user.has_role? :guest
can :read, [Product, Vendor, Banner]
cannot :view_prices, Product
end
然后在我看来,我只是做了这样的事情:
<% if can? :view_prices, Product %>
<div class="price pull-right">
<%= number_to_currency(@product.price) %> ea
</div>
<% else %>
<span class="no-price pull-right"><%= link_to "Log In To See Price", login_path %></span>
<% end %>
所以,基本上......我的真正目标是尝试root_path
根据用户的角色来改变。我基本上是在尝试实现这个问题的答案。