我已經瀏覽了一大堆不同的授權和ACL插件,就像你我不喜歡大多數人使用的CRUD方法。
最後,最適合我的是一個類似於Redmine使用的設置。我不知道它是否來自任何指定的插件,但我花了一些時間去了解它,並對我的案例做了必要的調整。
基本上它允許使用控制器和操作,無論是全局模型還是特定模型。開始時你指定什麼不同的權限分配:
MyApplication::ACL.mapper do |map|
map.permission :view_project, {:projects => :show}
map.permission :manage_project, {:projects => [:update, :edit, :post_status]}
map.permission :delete_project, {:projects => :destroy}
end
下一個步驟是將一個或更多的權限分配給角色是一個序列化領域的典範,其可以存儲任何權限,即:
<#Role id: 1 name: "Intern" permissions: [:view_project] >
<#Role id: 2 name: "Member" permissions [:view_project, :manage_project] >
然後通過成員資格模型映射不同的用戶角色。成員資格還可以與特定模型(如Project)進行映射,因爲您可能被允許管理一個項目而不是另一個項目,或者它可以是全局的,如應該限制的某些索引操作,但您不知道要授權哪個模型反對呢。
在您驗證這一切的控制器使用:
before_filter :authorize, :only => [:show, :update, :edit,
:post_status, :destroy]
,並授權當然是檢查當前用戶是具有電流控制器和所需的權限的任何角色的成員方法行動。
雖然這裏只是一個很長的描述,但總的來說它的工作原理:)它比其他ACL插件更復雜,但我認爲這是最「乾淨」的選擇,同時仍然允許靈活性,我需要。
我通過回顧這個問題了解了更多關於何時使用ACL的內容,http://stackoverflow.com/questions/3164550/when-should-i-use-acl-in-my-application,但仍然沒有更接近到答案。 – Prairiedogg 2010-11-18 14:58:56