2013-08-16 27 views
0

我有FooController但沒有Foo模型 - 它是通往第三方服務的網關。在FooController中,由do_bar方法訪問的資源是baz。目前任何人都可以管理其他人的baz,通過FooController,我想限制管理只屬於他們自己。Cancan:試圖限制對沒有同名模型的控制器的訪問

在我ability.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 

我基本上希望讓這個日e @ baz實例 - 正在FooController中操作,必須由該用戶擁有,以便他們能夠管理它。

我該怎麼做?

回答

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

就是這樣。隊友的歡呼聲 –

相關問題