if_attribute声明授权

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 
+0

我能找到的用户,并验证了比赛。但我需要找到用户并查看是否隶属关系具有某个特定ID的从属类型。 我可以得到的是user_id,但我如何看到该user_id的联属类型?我不明白... – 2010-03-13 21:12:52

+0

看到我的编辑,我认为这可以提供帮助。与Organization.affiliations和user.affiliations.with_type_3(named_scope建议)相交的只有一个或零个联属对象。 – nanda 2010-03-13 21:51:03

+0

几乎... 这部作品的控制台给我的用户只有一个值上: v.affiliations.type_admin 但 if_attribute:隶属关系=> intersects_with { user.affiliations.type_admin } 决不验证为真 – 2010-03-13 22:29:53