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_many
和belongs_to
代码。
答案 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