设计,cancan和命名空间路由

时间:2011-10-13 23:04:28

标签: ruby-on-rails devise cancan

我的路由器中有一个命名空间,如下所示:

namespace :my do
    resources :addressbookitems
end

并在controllers/my/addressbookitems_controller.rb中,我有行动indexshow

我希望根据命名空间限制用户可访问的资源:如果他们访问/addressbookitems,我希望与/my/addressbookitems具有不同的能力。我将如何构建我的Ability类?

2 个答案:

答案 0 :(得分:3)

使用普通的cancan,我认为唯一的选择是覆盖所有行为:

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 gem:https://github.com/galetahub/cancan_namespace

答案 1 :(得分:0)

如果我理解正确,那么你想在用户拥有这个模型时给予编辑,删除等功能。如果是这样,你就可以这样做:

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