2011-05-28 28 views
1

我有一個關於Rails安全性的問題。假設我們有User模型,並且它有許多角色的布爾值,例如admin,director等等。attr_accessible/security rails with rails - 處理這個問題的最佳方法是什麼?

管理員肯定會希望在表單上編輯這些值,因此我們希望使用attr_accessible讓管理員用戶執行此操作。

當然,其他用戶也可以編輯他們的用戶模型 - 編輯他們的個人資料,或者當他們邀請/添加新用戶到系統本身。在導演的情況下,我們實際上希望他們設置的角色比導演「小」,但我們不希望他能夠設置directoradmin

由於我們公開了這些控制器修改用戶, 't attr_accessible允許在這種情況下設置directoradmin?這聽起來像是一個非常大的安全漏洞。

那麼限制訪問的最佳方式是什麼?

  1. 設置每個參數,一次一個?

  2. 設置admin = falsedirector = false上的創建/更新操作?最簡單的解決方案,但在控制器中有這種令人討厭的地方。

  3. 使用if語句來查看該用戶角色是否可以編輯這些屬性並允許它?

  4. 使用導軌回調?,如before_validationbefore_save

  5. 其他一些聲明性解決方案?

感謝

回答

3

即將發佈的Rails 3.1(此時有一個候選版本)有一個新選項attr_accessible,它允許您定義一個角色,在控制器級別通過傳遞without_protection => true來覆蓋它。

你可以閱讀更多關於它在這裏:http://www.enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1

而關於attr_accessible鐵軌安全指南在這裏的部分:http://edgeguides.rubyonrails.org/security.html#countermeasures

+0

整齊,我應該升級到3.1,然後。我的項目還很早 – 2011-05-29 08:35:23

相關問題