Rails: 如何让康康在每个物体上发挥作用?
Rails: How to make cancan work on each object?
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 %>
这段代码允许有权访问删除按钮的用户。这里如果一个用户有权限,他可以访问所有对象的删除按钮。
例如:业务有10个对象id = 1到id = 10,用户可以访问所有10个删除按钮,如果他有权限
但是现在我想根据对象设置权限。
EX: Buisness 也是 1 到 10,用户只能看到按钮 2 和 5,因为用户数据 table 中有一个名为 auth_ids [] 的字段,它存储 [2,5]
如何实现?
您可以设置条件,类似于此处的指南:https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
can :destroy, Business, Business.where('id = ?', user.auth_ids)
您可以使用:
can :destroy, Business, id: user.auth_ids
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 %>
这段代码允许有权访问删除按钮的用户。这里如果一个用户有权限,他可以访问所有对象的删除按钮。
例如:业务有10个对象id = 1到id = 10,用户可以访问所有10个删除按钮,如果他有权限
但是现在我想根据对象设置权限。
EX: Buisness 也是 1 到 10,用户只能看到按钮 2 和 5,因为用户数据 table 中有一个名为 auth_ids [] 的字段,它存储 [2,5]
如何实现?
您可以设置条件,类似于此处的指南:https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
can :destroy, Business, Business.where('id = ?', user.auth_ids)
您可以使用:
can :destroy, Business, id: user.auth_ids