2012-02-04 39 views
1

的使用我創建了慘慘集成設計就像說的:
http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/
http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-2/設計+慘慘:定義CRUD喜歡告訴記者,在嘖嘖,現在如何限制控制器

現在我有兩個資源爲我的用戶類。設計和一個RESTful資源:用戶。
正如教程中提到的那樣,我在RESTful edit_user_path中包含了一個用於編輯用戶權限的表單。 現在我不明白如何限制普通用戶訪問該編輯功能並使用設計編輯功能。

是否有可能只限制用戶

can :manage, User 

,但他仍然可以管理色器件控制器?

解決

就可以在ability.rb

can :assign_roles, User 

添加,然後在_form REST風格的編輯

<% if can? :assign_roles, current_user %> 

,然後讓用戶無論是編輯過的RESTful _form或設計形式,無所謂然後

編輯

_form.html.erb(或HAML)

<% if can? :assign_roles, @user %> 

可以工作了。取決於你的控制器。應該工作得更好,因爲我已經採取了一些措施來適應它current_user

回答

0

如果你想確保你的能力在控制器級別上也被檢查過,你應該添加load_and_authorize_resource它。

class ProductsController < ActionController::Base 
    load_and_authorize_resource 
end 

https://github.com/ryanb/cancan/wiki/authorizing-controller-actions

,如果你只是顯示/隱藏取決於<% if can? %>方法在視圖中的鏈接,用戶可能仍然鍵入直接鏈接到例如編輯在地址欄中的動作

+0

是的,我知道。但是要感謝在那一刻記住我! – cschaeffler 2012-02-04 12:05:26