2010-04-16 3 views
2

У меня есть вопрос о рубин на рельсах, и процесс присвоения переменных с помощью переменной Params передается через формурубин на рельсы Params инъекции

class User 
    attr_accessible :available_to_admins, :name 
end 

Давайте предположим, что у меня есть поле, которое доступно только мой админы. Предполагая, что вы не являетесь администратором, я не буду отображать входные данные available_to_admins в вашей форме.

После этого, когда я хочу, чтобы сохранить данные, я просто сделать:

User.update_attributes(params[:user]) 

Если вы являетесь администратор, то никаких проблем, то PARAMS [: пользователь] буду содержать имя и available_tu_admins, и если вы не только ваше имя.

Поскольку available_to_admins является attr_accessible параметр, как я должен предотвратить не являющиеся административные пользователи от того, чтобы ввести переменную, содержащую вход available_to_admins с их новым значением?

ответ

2

a. Вы можете проверить роль пользователя в контроллере.

class User 
    # remove available_to_admins from attr_accessible 
    attr_accessible :name 
end 

def update 
    @user = User.new(params[:user]) 
    @user.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin' 
end 

b. Вы можете добавить before_save/before_update обратные вызовы для вашей модели

class User 
    # remove available_to_admins from attr_accessible 
    attr_accessible :name 
    before_save :check_role 
    before_update :check_role 
    def check_role 
    self.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin' 
    end 
end 
+0

Большое спасибо за Ваш ответ (ов) fl00r! –

Смежные вопросы