CanCan авторизуется идентификатором
У меня есть много-много отношений в rails, пользователь имеет и принадлежит многим user_types и наоборот. Тогда user_type имеет много ролей.
Таблица примеров таблицы role_fruits:
role_id: 1, fruit_id: 6
Пример таблицы ролей:
id: 1, имя: Bannana Worker
Пример таблицы для пользователей:
id: 1, имя_пользователя: employee143
Пример таблицы фруктов:
id: 6, имя: bananna
В модели
user.rbhas_and_belongs_to_many :roles
roles.rb has_and_belongs_to_many :users
Теперь я пытаюсь сделать так, чтобы пользователь имел роль "Bannana Worker" (id 1), чтобы иметь возможность добраться до него и без него, чтобы не попасть в него.
Псевдокод будет выглядеть примерно так:
если user.roles содержит идентификатор фруктов, тогда можно: управлять, фрукты
Как я могу выполнить это с помощью cancan, и если это невозможно, что было бы хорошим камнем замены?
Попробуйте что-то подобное в ability.rb
can :manage Fruit do |fruit|
user.roles.exists?(fruit.id)
end
и в вашем контроллере вы можете сделать
def your_action
@fruit = ...
authorize! :manage, @fruit
# ...
end