Cancan:试图限制对Controller的访问,而不使用同名的Model

时间:2013-08-16 01:53:07

标签: ruby-on-rails cancan

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

在我的能力.rb中,我已将以下内容写入initialize方法:

can :manage, :foo

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

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

FooController的:

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

我基本上想要这样做,以便在FooController中操作的@baz实例必须由该用户拥有,以便他们能够管理它。

我该怎么做?

1 个答案:

答案 0 :(得分: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