我在Rails應用程序中運行Pundit進行授權。我似乎已經掌握了這一切,但想知道如何將編輯或更新操作限制到某個字段。授權用戶使用Rails中的專家編輯特定字段
例如,用戶可以編輯他們的user.first_name,user.mobile或user.birthday等,但不能編輯他們的user.role。從本質上講,我的邏輯是,讓用戶編輯任何美觀的東西,但如果它是功能性的則不會。
這些字段只能由具有'super_admin'角色的用戶編輯(我已經使用下面的方法在user.rb上設置了該用戶)。
def super_admin?
role == "super admin"
end
def account?
role == "account"
end
def segment?
role == "segment"
end
def sales?
role == "sale"
end
def regional?
role == "regional"
end
def national?
role == "national"
end
def global?
role == "global"
end
我幾乎有一個乾淨的石板user_policy.rb
文件,其中更新和編輯行爲是默認
def update?
false
end
def edit?
update?
end
也許我的想法完全錯誤的這件事,應該只是包裝一個user.super_admin?如果在用戶展示頁面上的角色字段周圍有聲明,但是如果我只是使用該策略來確保安全性,則會感覺錯誤。
難道這種做法是容易形成注射(其中一個糟糕的演員可以在瀏覽器中編輯頁面,添加html代碼以添加角色並提交他們自己的角色?更安全/更好/更清晰的選擇性阻止在任何情況下使用Pundit的allowed_attributes幫助程序與Rails的強大參數一起添加的屬性。 – jpwynn 2017-02-03 03:44:35