if_attribute声明授权
问题描述:
我有这样的多对多关系: 用户has_many组织通过从属关系,反之亦然。if_attribute声明授权
我正在使用声明式组织,并且我只希望用户编辑特定组织,如果他隶属于并且联盟的联属类型属性是特定值。
所以隶属关系有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
为什么不创建一个named_scope找到隶属关系,其affiliationtype_id = 3?
从declarative_authorization documentation:
为了减少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
我能找到的用户,并验证了比赛。但我需要找到用户并查看是否隶属关系具有某个特定ID的从属类型。 我可以得到的是user_id,但我如何看到该user_id的联属类型?我不明白... – 2010-03-13 21:12:52
看到我的编辑,我认为这可以提供帮助。与Organization.affiliations和user.affiliations.with_type_3(named_scope建议)相交的只有一个或零个联属对象。 – nanda 2010-03-13 21:51:03
几乎... 这部作品的控制台给我的用户只有一个值上: v.affiliations.type_admin 但 if_attribute:隶属关系=> intersects_with { user.affiliations.type_admin } 决不验证为真 – 2010-03-13 22:29:53