Ruby on rails 声明性授权上的if_属性
我有这样的多对多关系: 一个用户通过附属机构拥有多个组织,反之亦然 我使用的是声明性组织,我只希望用户编辑一个特定的组织,如果他是附属的,并且附属的affiliationtype属性是一个特定的值 所以附属关系有3列,用户id、组织id和附属类型id 我可以做到: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
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