2014-05-14 38 views
0

On Rails 4.我很難理解如何授權用戶能夠通過CanCan編輯其組織信息。Ruby on Rails - CanCan Gem與多對多通過

使用案例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。我還希望用戶能夠編輯他/她的組織的詳細信息。換句話說,用戶 - >有很多 - >用戶組織 - >屬於 - >組織 - >有很多 - >組織詳細信息。

如何在CanCan中對此進行格式化,以便用戶可以通過UserOrganization模型創建/編輯他/她鏈接到的組織細節。謝謝。所有控制器在模型中都有load_and_authorize_resource和適當的has_manybelongs_to代碼。

回答

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 
限制