1

我有一个拥有_many Affiliations 的组织和一个拥有_one 组织的使命

所以我可以这样做:

m = Mission.first
m.organization.affiliations

一个用户也有_many affiliations 所以我可以这样做:

u = User.first
u.affiliations

在 declarative_authorization 中,如果用户隶属于任务组织​​,我希望他能够管理任务。我有这个:

has_permission_on :missions, :to => [:manage] do
  if_attribute :organization => { :affiliations => intersects_with { user.affiliates.type_admin } }
end

但我收到了这个错误:

Permission denied: new not allowed for #<User id: 2, firstname: "Miguel", lastname: "Alho", email: "blah@blah.com", birthday: "2010-07-05 20:24:00", crypted_password: "...", password_salt: "...", persistence_token: "...", perishable_token: "...", created_at: "2010-03-05 20:25:34", updated_at: "2010-03-30 15:45:36"> on #<Mission id: nil, user_id: nil, organization_id: nil, name: nil, objectives: nil, created_at: nil, updated_at: nil>

使命和组织是零。我认为这是因为在新版本中,mission.organization 不存在。

在任务控制器上,我有这个:

  def new
    if(params[:organization_id])
      session[:organization_id] = params[:organization_id]
      @mission = Organization.find_by_id(params[:organization_id]).missions.build
    end  
  end
4

1 回答 1

1

我无法解释为什么您的技术不起作用,但这是我完成类似事情的方式。

根据我在您的代码示例中收集的内容,您只希望隶属于任务组织​​的用户能够管理该任务。此外,该用户必须是管理员类型。我过去所做的是在您的组织模型中创建了一个 has_many 关系,它有一些额外的条件可以过滤掉非管理员类型的从属关系:

has_many :admins, :source => :user, :through => :affiliations, :conditions => "affiliations.type = 'admin'"

然后在您的 authorization_rules.rb 中添加以下规则:

has_permission_on :missions, :to => [:manage] do { if_attribute :organization => {:admins => contains {user}}}
于 2010-04-17T16:34:03.340 回答