CanCan Link Helper

时间:2014-01-17 18:23:35

标签: ruby-on-rails cancan

目前我的导航部分如下所示。

- if (can? :manage, Invoice) and (can? :manage, InvoiceItem)
  %li{class: is_active?(["invoices", "invoice_items"])}
    = link_to invoices_path do
      %i.icon-file-text
      Invoices

我看到定义能力的can方法可以接受一个数组。有没有办法制作罐头?辅助方法更简洁?

更新:我已经写了一个小的应用程序助手来解决这个问题。这是最好的方式吗?

def user_can?(actions, resources)
  actions.each do |action|
    resources.each do |resource|
      return false if cannot? action, resource
    end
  end
  true
end

在部分:

- if user_can? [:manage], [Invoice, InvoiceItem]
  %li{class: is_active?(["invoices", "invoice_items"])}
    = link_to invoices_path do
      %i.icon-file-text
      Invoices

1 个答案:

答案 0 :(得分:0)

can?一次只评估一个操作和一个资源。您的帮助程序很好,假设您不需要检查操作和资源的不同组合,这些组合通常不在视图中的单个条件语句中执行。

在决定是否显示:manage列表时,您可能还想考虑为什么确实需要检查InvoiceItem Invoice {{1}}访问权限。