我在Rails 3.1應用程序上使用Devise和Cancan寶石。如何在使用設備時未授權用戶操作?
我向用戶添加了幾個額外的列。
我設法定義能力,他們工作正常,我可以看到它的工作原理,但我還沒有想出我如何不授權行動(如:更新),因爲我無法訪問Devise或用戶控制器?
這是如何工作的?
我在Rails 3.1應用程序上使用Devise和Cancan寶石。如何在使用設備時未授權用戶操作?
我向用戶添加了幾個額外的列。
我設法定義能力,他們工作正常,我可以看到它的工作原理,但我還沒有想出我如何不授權行動(如:更新),因爲我無法訪問Devise或用戶控制器?
這是如何工作的?
或者,嘗試使用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
...
這有助於但不能完全解決。 Thx Simon – zabumba
啊,好的。你的意思是沒有設計權限?試圖弄清楚你需要什麼? S – simonmorley
由於Devise是一個引擎,我無權訪問users_controller以調用授權! :更新,編輯中的@user或創建實例。然後我意識到我甚至不需要那樣做。所以我想現在我應該關閉這個問題。 Thx Simon – zabumba
向用戶添加一個字段,例如: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
。
你可能想提供的兩個答案的組合。 Tsagadai正確地向你展示瞭如何使用before_filter來控制訪問,而simonmorley正在使用CanCan角色,就像你想要做的那樣。 –