2
我已經有rails_authorization_plugin啓動並使用模型運行。何時何地實施ACL
在我的網站上實施權限檢查的最佳方式是什麼?
我有一個複雜的條件,當一個對象的實例應該是可見的,是否有一種有效的方式將它們鏈接在一起,所以我沒有獲取多組數據,並且由於循環返回數據而磨損了我的數據庫過濾它?
我已經有rails_authorization_plugin啓動並使用模型運行。何時何地實施ACL
在我的網站上實施權限檢查的最佳方式是什麼?
我有一個複雜的條件,當一個對象的實例應該是可見的,是否有一種有效的方式將它們鏈接在一起,所以我沒有獲取多組數據,並且由於循環返回數據而磨損了我的數據庫過濾它?
有一種有效的方法:確保只運行一個查詢,並且運行的查詢完全返回所需的對象。當然,說起來容易做起來難。
處理此問題的一種方法是使用範圍構建您的條件。
@posts = @thread.posts.not_deleted.this_week.not_secret
如果所有這些方法都是範圍,那將只有一個查詢。
如果您的條件過於複雜,無法輕鬆使它們成爲範圍,那麼您應該編寫一個方法來返回用戶的可見對象。
class User
def posts_for(thread)
if is_admin?
thread.posts
elsif thread.owner == self
thread.posts.not_deleted
else
Post.find(:all, :conditions => something_complicated(thread, self))
end
end
end
我的應用程序有很多類型的對象,而且非常複雜的權限的,所以我們捕捉的method_missing這樣的電話,他們的路線,知道如何使所有不同的查詢權限庫。
嗯,我正在使用非常簡潔的rails acl插件,但我不認爲我可以用它來鏈接,我可以嗎? 是否有任何ACL插件的行爲幾乎像是activerecord的擴展? rails acl的文檔提供了很多開始,但實際上實施安全檢查讓我猜測很多。 感謝您的幫助,真的很好的建議已經在這裏! – 2009-07-09 17:01:42