Rails:如何让cancan在每个对象上运行?

时间:2016-12-22 03:56:47

标签: ruby-on-rails cancan

user.rb

def has_delete_role? name
  roles.each do |n|
    return true if n == name
  end
end

ability.rb

if user.has_delete_role? :business_delete
  can :destroy, Business
end

index.html.erb

<% if can? :destroy, @business %>
  <%= link_to 'delete', business_path(@business.id), method: :delete%>
<% end %>

这段代码允许有权访问删除按钮的用户。在这里,如果用户有权限,他可以访问所有对象的删除按钮。

EX:业务有10个对象id = 1到id = 10,如果他有,则用户可以访问所有10个删除按钮权力

但现在我想在对象上设置权限。

EX:商业也是1到10,用户只能看到按钮2和5,因为用户数据表中有一个名为auth_ids []的字段,它存储[2,5]

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以设置条件,类似于此处的指南:https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities

can :destroy, Business, Business.where('id = ?', user.auth_ids)

答案 1 :(得分:1)

您可以使用:

can :destroy, Business, id: user.auth_ids