if_attribute на декларативной авторизации

У меня есть many-many отношения как это: пользователь has_many организации посредством присоединения и наоборот.

Я использую декларативные организации, и я только хочу, чтобы пользователь отредактировал конкретную организацию, если он аффилирован, и 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, является ли текущий пользователь organization.affiliation[?] .user и если organization.affiliation[?] .affiliationtype_id = "3"

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

7
задан Michael Petrotta 13 March 2010 в 19:46
поделиться

1 ответ

РЕДАКТИРОВАТЬ:

Вы можете ограничить тип аффилированности с помощью intersects_with (& block) :

  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 :

Чтобы уменьшить избыточность в блоках 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
7
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: