实施基于角色的授权时如何在 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 ) }
#
你应该可以开始了。
我正在创建一个基于角色的应用程序 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 ) }
#
你应该可以开始了。