2010-03-13 119 views
7

我有這樣的多對多關係: 用戶has_many組織通過從屬關係,反之亦然。if_attribute聲明授權

我正在使用聲明式組織,並且我只希望用戶編輯特定組織,如果他隸屬於並且聯盟的聯屬類型屬性是特定值。

所以隸屬關係有3列,USER_ID,的organization_ID和affiliationtype_id

我可以這樣做:

o = Organization.find(:first) 
o.affiliatons[0].user and get the user 

現在我想這樣做:

has_permission_on [:organizations], :to => :edit do 
    if_attribute (...) 
end 

這if_attribute應該如果看當前用戶是organization.affiliation [?]。user和organization.affiliation [?]。affiliationtype_id =「3」

我希望這是語法問題...我真的需要得到這個工作。

回答

7

編輯:

你可以用intersects_with(&塊)限制隸屬關係的類型:

has_permission_on [:organizations], :to => :edit do 
    if_attribute :affiliations => intersects_with { 
     user.affiliations.with_type_3 
    } 
    end 

爲什麼不創建一個named_scope找到隸屬關係,其affiliationtype_id = 3?


declarative_authorization documentation

爲了減少has_permission_on塊冗餘,規則可以依賴於權限對相關對象:

authorization do 
    role :branch_admin do 
    has_permission_on :branches, :to => :manage do 
     if_attribute :managers => contains {user} 
    end 

    has_permission_on :employees, :to => :manage do 
     if_permitted_to :manage, :branch 
     # instead of 
     #if_attribute :branch => {:managers => contains {user}} 
    end 
    end 
end 
+0

我能找到的用戶,並驗證了比賽。但我需要找到用戶並查看是否隸屬關係具有某個特定ID的從屬類型。 我可以得到的是user_id,但我如何看到該user_id的聯屬類型?我不明白... – 2010-03-13 21:12:52

+0

看到我的編輯,我認爲這可以提供幫助。與Organization.affiliations和user.affiliations.with_type_3(named_scope建議)相交的只有一個或零個聯屬對象。 – nanda 2010-03-13 21:51:03

+0

幾乎... 這部作品的控制檯給我的用戶只有一個值上: v.affiliations.type_admin 但 if_attribute:隸屬關係=> intersects_with { user.affiliations.type_admin } 決不驗證爲真 – 2010-03-13 22:29:53