У меня вопрос по безопасности Rails.Допустим, у нас есть модель User
, и она имеет много логических значений для ролей, таких как admin
, director
и т. Д.
Администратор определенно захочет изменить эти значения в формах,поэтому мы хотим использовать attr_accessible
, чтобы позволить администратору делать это.
Конечно, другие пользователи также смогут редактировать свою модель пользователя - либо редактирование своего профиля, либо когда они приглашают /добавлять новых пользователей в систему самостоятельно.В случае с режиссером, мы на самом деле хотим, чтобы они устанавливали роли, которые «меньше», чем директор, но мы не хотим, чтобы он мог устанавливать director
или admin
, так как мы выставляем этиконтроллеры, которые изменяют пользователей, не позволят ли attr_accessible
разрешить установку director
и admin
в этом случае?Это звучит как очень большая дыра в безопасности.
Так каков наилучший способ ограничения доступа?
Установить каждый параметр, по одному за раз?
Установить admin = false
и director = false
для действий создания / обновления?Самое простое решение, но довольно неприятно иметь это в контроллере.
Используйте оператор if, чтобы увидеть, может ли эта пользовательская роль редактировать эти атрибуты и разрешать это?
Использовать обратные вызовы рельсов ?, например, before_validation
или before_save
?
Какое-нибудь другое декларативное решение?
Спасибо