Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 声明性授权上的if_属性_Ruby On Rails_Declarative Authorization - Fatal编程技术网

Ruby on rails 声明性授权上的if_属性

Ruby on rails 声明性授权上的if_属性,ruby-on-rails,declarative-authorization,Ruby On Rails,Declarative Authorization,我有这样的多对多关系: 一个用户通过附属机构拥有多个组织,反之亦然 我使用的是声明性组织,我只希望用户编辑一个特定的组织,如果他是附属的,并且附属的affiliationtype属性是一个特定的值 所以附属关系有3列,用户id、组织id和附属类型id 我可以做到: o = Organization.find(:first) o.affiliatons[0].user and get the user 现在我想这样做: has_permission_on [:organizations], :t

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

我使用的是声明性组织,我只希望用户编辑一个特定的组织,如果他是附属的,并且附属的affiliationtype属性是一个特定的值

所以附属关系有3列,用户id、组织id和附属类型id

我可以做到:

o = Organization.find(:first)
o.affiliatons[0].user and get the user
现在我想这样做:

has_permission_on [:organizations], :to => :edit do
  if_attribute (...)
end
if_属性应查看当前用户是否为organization.affiliation[?].user,以及organization.affiliation[?].affiliationtype_id=“3”

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

编辑:

您可以限制与(&block)相交的从属关系类型

  has_permission_on [:organizations], :to => :edit do
    if_attribute :affiliations => intersects_with {
      user.affiliations.with_type_3
    }
  end
为什么不创建一个命名的\u范围来查找其从属关系类型\u id=3的从属关系


发件人:

要减少块上的has_permission_中的冗余,规则可能取决于关联对象的权限:


我可以找到用户并验证匹配。但我需要找到该用户,并查看该用户是否具有某个id的从属类型。我可以获取该用户的id,但如何查看该用户id的从属类型?我不明白…看我的编辑,我想这会有帮助。只有一个或零个关联对象与Organization.affiliations和user.affiliations.with_type_3(命名为_范围建议)相交。几乎。。。这在控制台上起作用,只为用户提供了一个值:v.affiliations.type_admin,但if_属性:affiliations=>将_与{user.affiliations.type_admin}相交永远不会验证True您将命名的_范围添加到关联模型中了吗?命名为_scope:type_admin,:conditions=>{:affiliationtype_id=>3}我尝试了完全相同的方法,但对我来说不起作用…:/gem有更新吗?
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