Разработка, канкан и маршруты пространства имен - PullRequest
3 голосов
/ 14 октября 2011

В моем маршрутизаторе есть пространство имен, например:

namespace :my do
    resources :addressbookitems
end

и в controllers/my/addressbookitems_controller.rb У меня есть, например, действия index и show.

Я бы хотел по-разному ограничить ресурсы, доступные моим пользователям, в зависимости от пространства имен: если они получают доступ к /addressbookitems, я бы хотел иметь другие возможности, чем при /my/addressbookitems.Как бы я структурировал свой класс способностей?

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

С простым канканом я думаю, что единственным вариантом будет переопределить все поведение:

can do |action, subject_class, subject|
  # custom logic to allow or deny permission
end

Они показывают пример этого здесь: https://github.com/ryanb/cancan/wiki/Abilities-in-Database

Другой вариант будет использоватьcancan_namespace драгоценный камень: https://github.com/galetahub/cancan_namespace

0 голосов
/ 02 ноября 2011

Если я правильно понимаю, вы хотите дать возможность редактирования, удаления и т. Д., Когда пользователь владеет этой моделью. Если так, то вы можете сделать это следующим образом:

can update, AddressBookItem, :user_id => user.id
can destroy, AddressBookItem, :user_id => user.id

Если у вас есть более сложная логика, то:

can update, AddressBookItem do |item|
  item.user == user and item.state == :something
end
...