我有我的數據庫中的一些記錄,其中只有擁有用戶或管理員可以查看/編輯等如何在Rails中最好地保護記錄?
什麼是對一個應用程度地確保這些記錄,因此只有這些人可以看到這些的最佳途徑記錄?我可以用條件手動執行此操作,但我需要確保在每個find()中使用相同的條件。
任何想法?
我有我的數據庫中的一些記錄,其中只有擁有用戶或管理員可以查看/編輯等如何在Rails中最好地保護記錄?
什麼是對一個應用程度地確保這些記錄,因此只有這些人可以看到這些的最佳途徑記錄?我可以用條件手動執行此操作,但我需要確保在每個find()中使用相同的條件。
任何想法?
劃定範圍的取景器爲CURRENT_USER是在大多數情況下是有用提供的類型用戶的CURRENT_USER變量,但不會不考慮用戶是管理員並且有權訪問它不直接關聯的對象。
在模型中創建一個命名作用域,以將選擇範圍限制爲用戶擁有的記錄,或者如果指定的用戶是管理員,則選擇該記錄。用戶模型必須實現一個名爲「is_admin?」的方法如果用戶被視爲管理員,則返回true。
這樣,您就可以撥打:
my_widgets = Widget.accessible_by(user).find(:all, :conditions => ["created_at > ?", 1.day.ago.to_s(:db)])
class Widget
named_scope :accessible_by, lambda {|u|
conditions = nil
unless u.is_admin?
conditions = ["widgets.user_id = :user_id", {:user_id => u.id}]
end
return {:conditions => conditions}
}
end
我找到最好的方法是避免在這樣的實際模型發現者......
SecretRecord.find(:id, :conditions => 'user = ?', current_user.id)
,而使用集合關閉用戶對象
class User
has_many :secret_records
end
current_user.secret_records.find(id)
這會自動作用域的選擇到那些屬於當前用戶的祕密記錄。
放一個過濾器,可用於訪問此信息
current_user.admin? or params[:person_id].to_i == current_user.person.id
如果這個條件不滿足所有控制器的前重定向他們在其他地方
最好的例子,在這裏! – 2009-07-20 16:05:37
...以及您如何處理管理員? – 2009-07-20 16:39:13