我的路由器中有一个命名空间,如下所示:
namespace :my do
resources :addressbookitems
end
并在controllers/my/addressbookitems_controller.rb
中,我有行动index
和show
。
我希望根据命名空间限制用户可访问的资源:如果他们访问/addressbookitems
,我希望与/my/addressbookitems
具有不同的能力。我将如何构建我的Ability类?
答案 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