2010-03-13 2 views
7

У меня есть отношения «многие ко многим»: Пользователь имеет несколько организаций через филиалы и наоборот.if_attribute on declarative authorization

Я использую декларативные организации, и я только хочу, чтобы пользователь редактировал определенную организацию, если он является аффилированным лицом, а атрибут affiliationtype принадлежности является определенным значением.

Так принадлежности имеет 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 должны видеть, если текущий пользователь - организация.аффиляция [?]. пользователь и если организация.аффиляция [?]. affiliationtype_id = "3"

Надеюсь, это синтаксическая проблема ... Мне действительно нужно заставить эту работу работать.

ответ

7

EDIT:

Вы можете ограничить тип присоединения с 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

можно найти пользователя и проверки соответствия. Но мне нужно найти пользователя и посмотреть, есть ли принадлежность к аффилированности определенного идентификатора. Я могу получить user_id, но как я вижу для affiliationtype этого user_id? Я не понимаю ... –

+0

См. Мое редактирование, я думаю, это может помочь. Существует только один или нулевой объект аффилиации, который пересекается с Organization.affiliations и user.affiliations.with_type_3 (named_scope suggestion). – nanda

+0

почти ... это работает на консоли не дает мне только одно значение для пользователя: v.affiliations.type_admin но if_attribute: принадлежность => intersects_with { user.affiliations.type_admin } Никогда validates true –

Смежные вопросы