CanCan для общего просмотра - PullRequest
       1

CanCan для общего просмотра

0 голосов
/ 23 декабря 2011

Я использую cancan для авторизации.У меня есть общее представление, которое необходимо авторизовать в зависимости от того, какой контроллер это.

Проблема в том, что у меня есть общее частичное (description.rhtml), и оно используется двумя разными моделями (Product и Orders).Поэтому, когда кто-то заходит на

www.example.com / product / 1 - раздел описания показывает описание продукта www.example.com/order/1 - раздел описания показывает описание заказа

В этом разделе описания есть кнопка редактирования, так что пользователь может редактировать ее, но условие

  • , пользователь должен быть владельцем продукта на странице продукта / 1 или
  • владельцемзаказ, когда пользователь находится на странице заказа / 1.

Мой класс способностей проверяется на

  • , если пользователь является владельцем или нет - в зависимости от продукта или контроллера заказа. Однакона виду:

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

    а если можно?: update, @orders возвращает true или false, показывает или скрывает кнопку редактирования в зависимости только от этого условия

Поэтому мой вопрос заключается в том, как можно использовать CanCan для решения этой проблемы

Надеюсь, я был чист.

1 Ответ

1 голос
/ 23 декабря 2011

Я думаю, что вы не должны использовать точно такой же частичный для продуктов и заказов.

Возможно, вы захотите использовать макет:

views / layouts / description.html.erb

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

views / orders / 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 были нулевыми, то можете?вернет false, и результат всего выражения будет результатом (can? :update, @product), который, я думал, был тем, что вы хотели.

...