CanCan авторизуется идентификатором

80
7

У меня есть много-много отношений в rails, пользователь имеет и принадлежит многим user_types и наоборот. Тогда user_type имеет много ролей.

Таблица примеров таблицы role_fruits:

role_id: 1, fruit_id: 6

Пример таблицы ролей:

id: 1, имя: Bannana Worker

Пример таблицы для пользователей:

id: 1, имя_пользователя: employee143

Пример таблицы фруктов:

id: 6, имя: bananna

В модели

user.rb
has_and_belongs_to_many :roles
roles.rb
has_and_belongs_to_many :users

Теперь я пытаюсь сделать так, чтобы пользователь имел роль "Bannana Worker" (id 1), чтобы иметь возможность добраться до него и без него, чтобы не попасть в него.

Псевдокод будет выглядеть примерно так:

если user.roles содержит идентификатор фруктов, тогда можно: управлять, фрукты

Как я могу выполнить это с помощью cancan, и если это невозможно, что было бы хорошим камнем замены?

спросил(а) 2012-08-10T22:32:00+04:00 8 лет, 1 месяц назад
1
Решение
57

Попробуйте что-то подобное в ability.rb

can :manage Fruit do |fruit|
user.roles.exists?(fruit.id)
end

и в вашем контроллере вы можете сделать

def your_action
@fruit = ...

authorize! :manage, @fruit

# ...
end

ответил(а) 2012-08-10T22:41:00+04:00 8 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

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