2012-11-20 31 views
0

我在Rails 3.1應用程序上使用Devise和Cancan寶石。如何在使用設備時未授權用戶操作?

我向用戶添加了幾個額外的列。

我設法定義能力,他們工作正常,我可以看到它的工作原理,但我還沒有想出我如何不授權行動(如:更新),因爲我無法訪問Devise或用戶控制器?

這是如何工作的?

+0

你可能想提供的兩個答案的組合。 Tsagadai正確地向你展示瞭如何使用before_filter來控制訪問,而simonmorley正在使用CanCan角色,就像你想要做的那樣。 –

回答

1

或者,嘗試使用ability.rb

if user.role? :admin 
    can [:create, :read], [Model1, Model2] 
end 

if user.role? :user 
    can [:read], Model1, :id => user.id 
end 

這將允許管理員創建或讀取但不能更新以下。並允許用戶閱讀Model1(如果它屬於它們)。如果您創建自定義操作,如「copy_model」,你可以添加相同,以ability.rb

... 
can [:copy_model, :read], Model1, :id => user.id 
... 
+0

這有助於但不能完全解決。 Thx Simon – zabumba

+1

啊,好的。你的意思是沒有設計權限?試圖弄清楚你需要什麼? S – simonmorley

+0

由於Devise是一個引擎,我無權訪問users_controller以調用授權! :更新,編輯中的@user或創建實例。然後我意識到我甚至不需要那樣做。所以我想現在我應該關閉這個問題。 Thx Simon – zabumba

1

向用戶添加一個字段,例如:approved,並且僅允許管理員訪問該字段。

在您的ApplicationsController中寫一個過濾器,因爲您在開始使用授權時會保持一切乾燥,您將會使用它。

class RandomsController 
    before_filter :verify_approval, only: [:update] 

巴姆,做到:其中用戶需要的特權

def verify_approval 
    unless current_user.approved 
    flash[:error] = I18n.t("not_approved") 
    redirect_to(root_path) 
    end 
end 

然後使用該過濾器。沒有編輯設計或UsersController

+0

是的,但我何時何地設置:批准爲真?以及如何才能使其只能訪問管理員? – zabumba

+0

哦,我明白你的意思了。我想要的是允許用戶編輯他自己的配置文件,而不是其他人。你的解決方案是隻允許管理員編輯配置文件嗎?這不是我需要的 – zabumba

相關問題