Давайте предположим простой и распространенный сценарий.
У меня есть модель User
с полем admin
.Пользователи не могут редактировать свое поле admin
, но администраторы могут редактировать чье-либо поле admin
.
Итак, мне нужно предоставить доступ обоим типам пользователей.
Если бы я представил этоRESTful, у меня было бы два ресурса, скажем
resource :user
namespace :admin do
resources :users
end
... И тут возникает дилемма - как мне контролировать, где поле admin
можно изменить, а где нет?
Я могу установить attr_protected :admin
, чтобы пользователи не могли изменять свой статус администратора.Но тогда мне придется сделать из этого особый случай в Admin::UsersController
, например
@user.admin = params[:user][:admin]
Я могу отсканировать параметр в UsersController
, что еще хуже
params[:user].delete(:admin)
Оба эти решения кажутся мне грязными.Как правильно справляться с такими ситуациями?
Что, если имеется более двух уровней доступа?