CanCan用于共享视图



我使用cancan进行授权。我有一个共享视图,需要授权取决于它是哪个控制器。

问题是:我已经分享了部分(description.rhtml),它被两个不同的模型(Product和Orders)使用。所以当有人进入

www.example.com/product/1 - description部分显示产品的描述www.example.com/order/1 -描述部分显示订单的描述

这个描述部分有编辑按钮,所以用户可以编辑它,但条件是

  • 用户必须是产品的所有者,当在产品/1页或
  • 当用户在订单/1页时,订单的所有者。

我的能力等级检查

  • 如果用户是否是所有者-取决于产品或订单控制器然而,在视图中:

    if (can? :update, @orders) || (can? :update, @product)
    < hide edit button >
    end
    

    但是如果可以呢?:update, @orders返回真或假,它显示或隐藏编辑按钮取决于该条件只

所以我的问题是如何使用CanCan来解决这个问题

希望我说得清楚。

我认为你不应该对产品和订单使用完全相同的部分。

你可能想使用布局:

视图/布局/description.html.erb

<div class="description">
    <%= model.description %>
    <!-- other common code... -->
    <div class="actions">
        <%= yield %>
    </div>
</div>

视图/订单/description.html.erb

<%= render :layout => "layouts/description", :locals => { :model => @order } do %>
    <%= if (can? :update, @order) %>
       your link
    <% end %>
<%= end %>

您不必这样做,但我认为这比在同一个部分中处理多个模型要干净得多。


注:

but if can? :update, @orders return true or false, it show or hides edit button depending on that condition only

我真的不明白。如果@orders为空,那么can?将返回false,整个表达式的结果将是(can? :update, @product)的结果,我认为这是您想要的。

最新更新