实施基于角色的授权时如何在 rails(设计)中允许新参数

How to permit a new parameter in rails (devise) when implementing role based authorization

我正在创建一个基于角色的应用程序 authorization.So,我创建了一个迁移来设计用户添加新列 "role" 我的应用程序控制器中有以下代码块以允许新参数(角色)。但是当我尝试注册为新 user.I 时仍然收到参数角色为 unpermitted.Please 的错误帮助我来解决这个问题。

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

这是我的用户模型

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

迁移如下

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

请帮我解决这个issue.Thank你

您的用户模型无权访问参数,因此您可以从那里删除 user_params 方法。除非你嵌套属性,否则你不需要为角色属性传入数组,所以更改

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 ) }
#

你应该可以开始了。