2013-09-28 3 views
1

У меня есть две модели, кроме User. Hotel и Room.Авторизовать создание действия на основе parent_id объекта

Вот сценарий:

hotel :has_many => :rooms 

Пользователь может создавать номера, если связанный отель назначается пользователем. Как я могу реализовать авторизацию для действия create room в ability, так как hotel_id неизвестно до тех пор, пока комната не будет сохранена?

я могу реализовать метод can? в create action под rooms controller, но я ожидаю, чтобы иметь его в ability. Эта проблема должна быть решена в шаблоне nested_resources, но почему-то мне нужно создавать комнаты в отдельном контроллере (не вложенном).

ответ

1

Вы можете использовать nested_resources средство, как описано здесь: https://github.com/ryanb/cancan/wiki/Nested-Resourcesно только установить это для конкретных создать действие отдельного контроллера с помощью конкретных действий санкционирования методов, описанных здесь: https://github.com/ryanb/cancan/wiki/authorizing-controller-actions

Edit - Обновлен пример для ability.rb в соответствии с просьбой в комментариях:

can :create, Room, :hotel => { :user_id => user.id } 
+0

да !, Как я уже говорил в пост, используя вложенные ресурсы, мы можем добиться этого. Поскольку я должен использовать отдельный контроллер, я использовал второй подход. То есть я поставил проверку авторизации на контроллере. Я ожидал, что что-то будет управляемо через модуль способности. Я думаю, что нет никакого способа для этого – Muntasim

+0

Я обновил стандартный способ выполнения таких способностей в файле Ability.rb –

Смежные вопросы