1
我有一個我正在構建的系統,似乎需要一些複雜的規則,而不是在整個系統中混亂的規則。我期待集中整個過程。 (這可能不是我所擁有的最聰明的主意)如何在Ruby on Rails中實現複雜的安全規則
我最(也許是最不重要的)想法是在保存到數據庫之前使用單獨的類來檢查任何對象,並將其與各種字段中的允許值列表。它非常緊密地綁定到數據庫結構上,而且易於測試和易於維護。規則
例子:
- 主持人可以提出意見與主持人狀態,但沒有管理的狀態。
- Comments.status只能是正常或管理員(admin是保留給管理員)
- 用戶不能修改意見主持人值
- Comments.status只能是正常,Comments.display只能是正常
- 只有管理員才能暫停用戶帳戶衆多領域的
- 列表
- 只有管理員可以修改其他用戶帳戶對與邏輯域
- 限制,以確定當前用戶擁有的行
- 只有付費帳戶的用戶才能執行X,Y和Z.
我遇到的問題是我在哪裏放這個邏輯。這對於rails驗證來說太複雜了。如果我只查看登錄用戶的狀態,實施這些規則中的一部分就很困難或不可能實現。目前的解決方案是創建一個安全類,它將接受數據庫對象和用戶,並允許或不允許執行操作。
如果我遵循這一行動的過程,實施將是討厭的。現在,我看着這樣的事情
#For every field on an object passed to Security::allow?(user, object), call this private method
def allow_helper?(user, object, field)
perm = permissions[user.rank][object.class.name][field]
if perm.is_a? Array
perm.include? object.send(field)
else
perm
這是會很快成爲維護的噩夢。這是我夢寐以求的夢魘的替代選擇。在我編碼之前,我停下了腳步。
可能有助於解釋爲什麼這太複雜的驗證,這似乎是一個明顯的答案。 – kajaco 2009-05-20 22:44:06
我想我認爲使用安全驗證會混合邏輯,我不想混合。也許這不是我認爲會是的問題。 – epochwolf 2009-05-21 00:26:34