Вопрос

У меня есть такое отношение многие-ко-многим:Пользователь имеет_много организаций через филиалы и наоборот.

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

Таким образом, affiliations имеет 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"

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

Это было полезно?

Решение

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

Вы можете ограничить тип принадлежности с intersects_with(&блок) :

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

Почему бы не создать Name_scope для поиска филиалов, у которых affiliationtype_id = 3?


От документация по декларативной_авторизации:

Чтобы уменьшить избыточность в блоках 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top