Rails 4 - Какова наилучшая практика для ограничения доступа к совместно используемым объектам

58
6

Пользователь has_many Контракты как покупатель Пользователь has_many Контракты как продавец

Я знаю, что могу использовать CanCan, чтобы ограничивать Пользователя тем, что у них есть. Но в этом случае у меня есть Контракт, в котором есть как Покупатель, так и Продавец. Я хочу, чтобы Пользователь мог видеть/читать все Контракты, для которых они являются Покупателем или Продавцом.

Я попытался настроить область действия и использовать ее с CanCan, но это, похоже, не работает.

Я настраиваю свою Способность как таковую...

can :read, Contract.parties(user.id)

Моя область определяется как...

scope :parties, lambda { |user_id| where("seller_id = ? OR buyer_id = ?", user_id, user_id) }

Я также пытался настроить свои способности по-другому...

can :read, Contract, buyer_id: user.id
can :read, Contract, seller_id: user.id

Но выше, похоже, конфликтует и выдает ошибку

спросил(а) 2013-08-24T20:19:00+04:00 7 лет, 1 месяц назад
1
Решение
90

Попробуйте использовать блок с возможностями CanCan:

can :read, Contract do |c|
(c.buyer_id == user.id) || (c.seller_id == user.id)
end

ответил(а) 2013-08-26T18:14:00+04:00 7 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема