看那康康舞GitHub的頁面:http://github.com/ryanb/cancan
基於望着那和RailsCast兩個,我注意到兩兩件事:
- 你定義的能力作爲一個單獨的模型。似乎沒有任何必要的數據庫列。
- 有沒有辦法讓你被迫做角色,你可以自由地做到這一點,但你會。
隨着restful_authentication,只是做正常的事情與你User
模型。
最自然的方式來增加慘慘將是一個額外的列添加到您的User
模式叫role
或ability
或東西,那麼你認爲合適的定義方法。我個人可能會做一些存儲在數據庫中的數字系統,如管理員的「0」,高級用戶的「1」,低級用戶的「2」等。
這是一個幾種可能性:
# Returns true if User is an admin
def admin?
self.role == 0
end
和:
# Returns true if User is admin and role?(:admin) is called, etc.
def role?(to_match)
{
0 => :admin,
1 => :super_user,
2 => :user,
3 => :commenter,
}[self.role] == to_match
end
然後在您的Ability
initialize
方法,你可以使用某種條件語句來設置的能力,如從Railscast /自述這些內容摘要:
if user.role? :admin
can :manage, :all
elsif user.role? :super_user
...
end
或者:
if user.admin?
can :manage, :all
else
...
end
當然,所有你需要做的就是讓別人去做。 :) – ChaosPandion 2010-07-08 15:56:07