如果用户没有访问权限,则隐藏菜单 - CanCan

时间:2014-03-17 20:43:24

标签: devise ruby-on-rails-3.2 cancan

我有一个名为“admin”的菜单条目,子条目为“client”,“users”和“sales”。然后我有3个不同的角色(管理员,经理,员工)。角色“admin”可以访问“用户”,角色“employee”可以访问“客户”和“销售”。 “经理”无法访问菜单中的任何选项。

我可以隐藏其他菜单,但由于这有两个不同的角色,我遇到了一些问题......我正在使用带有设计和cancan的rails 3(在用户模型中定义了角色)。

例如,这有效:

<% if can? :read, Client %>

在菜单条目中,我然后评估每个子条目以相应地显示/隐藏用户角色,这也有效。按照相同的逻辑,我试着隐藏主要条目,不止一个角色:

<% if can? :manage, (Client || User || Sales) %>

但这仅评估第一个(在本例中为“客户”)。有可能做我想要的吗?什么是同时“评估”多个角色的最佳方式?

1 个答案:

答案 0 :(得分:1)

你可以这样做你想做的事情:

<% if can?(:manage, Client) || can?(:manage, User) || can?(:manage, Sales) %>

但我认为在这种情况下,更好的解决方案就是检查用户是否不是经理。这取决于您如何保存用户角色。例如:

 <% if current_admin_user.role != 'Manager' %>