2017-08-01 3 views
0

Je travaille sur la création d'une application avec l'autorisation basée sur les rôles. Donc, j'ai créé une migration pour concevoir des utilisateurs " Et j'ai le bloc de code suivant dans mon contrôleur d'applications pour permettre le nouveau paramètre (rôle) .Mais encore quand je tente de vous inscrire en tant que nouvel utilisateur.J'obtiens l'erreur que le rôle de paramètre est non autorisé.S'il vous plaît m'aider à résoudre ce problème.Comment autoriser un nouveau paramètre dans les rails (concevoir) lors de l'implémentation de l'autorisation basée sur les rôles

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 
protected 
def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit( :email, :password, :password_confirmation, roles: []) } 
end 

end 

C'est ce que j'ai dans mon modèle utilisateur

class User < ApplicationRecord 
    belongs_to :role 
    # has_many :Product 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

     ROLES = %i[admin manager customer] 

def user_params 
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :role) 
end 


end 

migration est comme suit

class AddRoleToUsers < ActiveRecord::Migration[5.0] 
    def change 
    add_column :users, :role, :string 
    end 
end 

S'il vous plaît me aider à résoudre ce issue.Thank vous.

+0

Possible duplication de [Ajout de paramètres personnalisés pour concevoir l'enregistrement - paramètres non autorisés] (https://stackoverflow.com/questions/42572124/adding-custom-parameters-to-devise-registration-unpermitted-parameters) – Gerry

+0

Possible duplicate of [Ajout d'un nouveau champ provoque une erreur] (https://stackoverflow.com/questions/43307494/adding-a-new-field-causes-an-error) –

Répondre

2

Votre modèle utilisateur n'a pas accès aux paramètres, vous pouvez donc supprimer la méthode user_params à partir de là. À moins que vous les attributs de nidification, vous ne devez passer dans le tableau de l'attribut de rôle, donc changer

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit( :email, :password, :password_confirmation, roles: []) } 

à

devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit( :email, :password, :password_confirmation, :role) } 
#

Et vous devriez être bon d'aller.

+0

Toujours obtenir le même résultat –

+0

Démarré POST "/ users" pour 127.0.0.1 at 2017-08-01 19:29:24 +0530 Traitement par Devise :: RegistrationsController # créer en tant que HTML Paramètres: {"utf8" => "✓", "authenticity_token" => "OH3R7o1M + 0BkzD2iVG/yHiovWZ1oj0wBafxgU5C2kBu1q3LD5dNWcVpDQ/c6QwfpZ2UTINpghRYYxmodUxBT + Q == "," utilisateur "=> {" email "=>" [email protected] "," mot de passe "=>" [FILTRÉ] "," password_confirmation "=>" [FILTRÉ] ", "rôle" => "admin"}, "commit" => "S'inscrire"} Paramètre non autorisé: rôle –

+0

(0.1ms) begin transaction L'utilisateur existe (11.1ms) SELECT 1 COMME UN FROM "users" WHERE "users". "email" =? LIMIT? [["email", "[email protected]"], ["LIMIT", 1]] (0.1ms) transaction de rollback –