我有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实例必须由该用户拥有,以便他们能够管理它。
我该怎么做?
答案 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