Ruby on Rails - CanCan Gem有很多对很多

时间:2014-05-14 15:27:27

标签: ruby-on-rails cancan

On Rails 4.我无法理解如何授权用户通过CanCan编辑组织的信息。

用例1:用户有很多组织;组织有很多用户。此关系信息存储在第三个模型UserOrganization(具有:user_id:organization_id属性)中。所以基本上,只要用户通过第三个模型链接,用户就可以编辑组织信息。我了解了这段代码,但它不起作用(在ability.rb中):

def initialize(user)
  can [:show, :edit, :update], Organization, user_organizations: { user_id: user.id }
end

(未定义的方法user_id说)

用例2:有第四个模型,OrganizationDetails。一个组织可以有许多organization_details。我还希望用户能够编辑他/她组织的详细信息。

换句话说,用户 - >有很多 - > UserOrganizations - >属于 - >组织 - >有很多 - > OrganizationDetails。

如何在CanCan中对此进行格式化,以便用户可以通过UserOrganization模型创建/编辑他/她链接到的组织详细信息。谢谢。所有控制器都有load_and_authorize_resource以及模型中相应的has_manybelongs_to代码。

1 个答案:

答案 0 :(得分:0)

想出如何做到这一点。

按组织限制:

can [:show, :edit, :update], Organization do |organization|
  UserOrganization.where(user_id: user.id, organization_id: organization.id).any?
end

按OrganizationDetail限制

can [:show, :edit, :update], OrganizationDetail do |organization_detail|
  UserOrganization.where(user_id: user.id, organization_id: organization_detail.organization.id).any?
end