我使用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)
的结果,我认为这是您想要的。