2010-03-13 22 views
7

Şunlar arasında çoktan çoğa ilişkim var: Bir kullanıcı has_many kuruluşları, bağlı kuruluşlar ve tersi.if_attribute bildirim amaçlı yetkilendirme

Deklarasyon kuruluşlarını kullanıyorum ve yalnızca bir kullanıcının bağlı olduğu bir kuruluşa ve bağlı kuruluşun affiliationtype özniteliğinin belirli bir değere sahip olduğunu düzenlemesini istiyorum.

Yani bağlantıları 3 sütun, user_id, organization_id vardır ve affiliationtype_id

Yapabileceğim

: eğer

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

if_attribute görmelisiniz O:

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

şimdi bunu yapmak isteyen geçerli kullanıcı organization.affiliation [?]. kullanıcı ve eğer organization.affiliation [?]. affiliationtype_id = "3"

Umarım bu sözdizimi meselesidir ... Bu işe gerçekten ihtiyacım var.

cevap

7

DÜZENLEME:

Sen intersects_with (& blok) ile ilişkili olduklarından tipini kısıtlayabilir:

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

Neden affiliationtype_id = 3 bağlılıkları bulmak için bir named_scope oluşturmaz?


declarative_authorization documentation Gönderen:

has_permission_on bloklarda fazlalığı azaltmak için bir kural ilişkili nesneler üzerinde izinlere bağlı olabilir:

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

Ben kullanıcıyı bulup maçı doğrulayabilir. Ancak, kullanıcıyı bulmalı ve bağlı kuruluşun belirli bir kimliğe sahip olup olmadığına bakmalıyım. Kullanabiliyorum user_id, ama o user_id'in affiliationtype için nasıl görüyorum? Anlamadım ... –

+0

Düzenlememe bak, bence bu yardımcı olabilir. Organization.affiliations ve user.affiliations.with_type_3 (named_scope suggestion) ile kesişen yalnızca bir veya sıfır bağlantı nesnesi var. v.affiliations.type_admin ama if_attribute: üyelikler => intersects_with { user.affiliations.type_admin } Hiç – nanda

+0

neredeyse ... bu bana kullanıcı için sadece bir değer veren konsolda çalışır doğrulanır –

İlgili konular