2013-12-11 2 views
0

Я использую рельсы 4 с сильными параметрами и пытаюсь выяснить, как установить сильные параметры, чтобы не допускать атрибутов с параметром.Rails 4 Сильные параметры напротив разрешить все атрибуты

Я читал это Rails 4 Strong parameters : permit all attributes? И хотел бы сделать противоположное этому.

params.require(:user).permit! 

Разрешите все атрибуты, как я могу сделать обратное?

ОБНОВЛЕНИЕ ЭТО МОЙ ПОЛНЫЙ КОД:

в приложение/контроллеры/application_controller.rb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) } 
     devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:signin, :password, :remember_me) } 
     devise_parameter_sanitizer.for(:account_update) {|u| u.permit(:username, :email, :password, :password_confirmation, :current_password)} 
     devise_parameter_sanitizer.for(:sign_in) { |a| a.permit(:signin, :password, :remember_me) } 
     devise_parameter_sanitizer.for(:account_update) {|a| a.permit(:username, :email, :password, :password_confirmation, :current_password)} 
    end 
end 

в приложение/модели/admin.rb

class Admin < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable, :registerable 
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable 

    attr_accessor :signin 

    def self.find_first_by_auth_conditions(warden_conditions) 
     conditions = warden_conditions.dup 
     if login = conditions.delete(:signin) 
     where(conditions).where(["username = :value OR lower(email) = lower(:value)", { :value => login }]).first 
     else 
     where(conditions).first 
     end 
    end 

    validates :username, presence: true, length: {maximum: 255}, uniqueness: { case_sensitive: false }, format: { with: /\A[a-zA-Z0-9]*\z/, message: "may only contain letters and numbers." } 
end 

Модель users.rb такая же, как у admin.rb mo дель. Это приводит к двум различным признакам/знакам в ссылках - 1 для каждой модели. Также мне нужно оставить: регистрируемый модуль, чтобы я мог переопределить регистрируемый модуль по умолчанию. Однако я изменил представления, чтобы не отображать страницу администратора при вводе в браузере. --- Мне нужно только заблокировать его через командную строку.

Я также отправил предыдущий вопрос подобный этому:

Rails 4 Devise Strong Parameters Admin Model

ответ

0

Если вы не используете какие-либо пользовательские введенные параметры (например, для GET), вам не нужно использовать params вообще. Ваш контроллер будет работать, и проблем с безопасностью не будет.

+0

Я использую устройство и пытаюсь установить админ-модель, позволяющую никому не подписывать__ – Daniel

+0

Сильные параметры не используются в моделях - если у вас нет контроллера или маршрута для людей, чтобы зарегистрироваться, для них не будет способа для этого. – Ari

+0

Я удалил: регистрируемый модуль из модели admin, но я считаю, что кто-то все еще может создать администратора из терминала, дающего им доступ к моему сайту. – Daniel

0

Поведение по умолчанию - противоположное .permit. Если вы не укажете атрибут в параметрах params, это походит на отказ пользователю получить доступ к чему-либо с этими атрибутами.

+0

Так я и думал, но когда я не разрешаю ничего, это позволяет администраторам зарегистрироваться, чего я не хочу. – Daniel

+0

Возможно, вы захотите использовать before_create в своей модели пользователя и заблокировать администраторов от регистрации там.Можете ли вы разместить свои атрибуты и немного больше кода - трудно понять, что вы пытаетесь сделать с помощью небольшого кода, который вы предоставили. Благодарю. – Philip7899

+0

Что делать, если я сделал «params.permit!», Теперь я хочу вернуть его обратно к умолчанию, как я могу это сделать? – barlop

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