【问题标题】:Hide menu if user doesn't have access - CanCan如果用户无权访问,则隐藏菜单 - CanCan
【发布时间】:2014-03-17 20:43:23
【问题描述】:

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

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

例如,这是有效的:

<% if can? :read, Client %>

然后我在菜单条目中评估每个子条目以根据用户角色显示/隐藏,这也有效。按照相同的逻辑,我尝试了隐藏主条目,多个角色:

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以用这种方式做你想做的事:

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

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

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

    【讨论】:

    • 谢谢,它成功了()。我没有选择第二种方法,因为我认为这种方法在未来的开发中会更容易,但我认为在这种情况下它也可以。我会将其标记为最佳答案,因为它解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多