0

我有一个FooController但没有模型 Foo - 它是第三方服务的门户。在FooController中,该do_bar方法访问的资源是baz. 目前任何人都可以通过 管理其他人的bazFooController我想将管理限制在他们自己的范围内。

在我的ability.rb 中,我在initialize方法中写入了以下内容:

can :manage, :foo

但我想做的是写这样的东西(当然这不起作用):

can :manage, :foo
  @baz.user == user
end

Foo控制器:

load_resource :baz, find_by: :user_data, parent: false

def do_bar
  @baz = Baz.find(params[:user_data]) #necessary otherwise @baz is nil
  authorize! :manage, :foo

  #other stuff
end

我本质上想要做到这一点,以便 @baz 实例 - 在 中被操纵FooController,必须由该用户拥有,以便他们能够管理它。

我怎样才能做到这一点?

4

1 回答 1

1

1.定义Baz的能力。

can :manage, Baz, :user => user

2.您可以手动授权。

#load_resource :baz, find_by: :user_data, parent: false

def do_bar
  @baz = Baz.find(params[:user_data]) #necessary otherwise @baz is nil
  authorize! :manage, @baz

  #other stuff
end
于 2013-08-16T02:20:48.607 回答