cancan способность - читать / управлять только одним конкретным экземпляром?

Извините - в тумане мозга!

У нас есть приложение с использованием cancan. Прямо сейчас у нас есть меню, которое делает такие вещи:

<%= link_to "Devices", devices_path if can? :read, Device %>

Но это замечательно, если человек может читать ВСЕ устройства... но терпит неудачу, если человек может читать только одно конкретное устройство. Мы используем объект роли.

Как мы действуем на тот факт, что пользователь может: прочитать одно устройство?

1 ответ

Предположим в вашем контроллере:

@device = Device.find_by_user_id(current_user.id)

и в вашем видении:

<%= link_to "Devices", devices_path if can? :read, @device %>

и в файле способностей канкана:

class Ability
  include CanCan::Ability

  def initialize(user)
    can :read, Device, :user_id => user.id
  end
end

более подробную информацию можно найти на https://github.com/ryanb/cancan/wiki/Defining-Abilities

Другие вопросы по тегам