7

我有这样的多对多关系:用户通过附属机构拥有多个组织,反之亦然。

我正在使用声明性组织,并且我只希望用户编辑一个特定的组织,如果他是附属的并且附属的 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"

我希望这是语法问题......我真的需要让它工作。

4

1 回答 1

7

编辑:

您可以使用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
于 2010-03-13T21:01:28.863 回答