首页 文章

更改rails 4中的角色

提问于
浏览
1

我在rails composer的帮助下创建了应用程序 . 使用设计进行身份验证,使用cancan管理角色 . 所以我默认有3个角色:管理员,用户和VIP . 我删除了VIP,因为我不需要它 . 运行rake db:seed以创建默认管理员 . 然后我来到localhost并看到“第一用户”作为管理员 . 我注销并注册(注册)新用户 . 然后,再次以管理员身份登录 . 我看,通过deafault,这个新用户没有任何角色 . 我也看到了,我可以改变它(“改变角色” - 按钮) . 我推了它,管理员可以选择新用户是第二个管理员还是只是用户 . 我选择,例如,用户,按“更改角色”并在“用户控制器#更新错误的参数数量(2对1)”中有“ArgumentError” .

Sooo,我有两个问题:1 . 如何让我的管理员能够无错误地更改角色 . 2.如何使新注册用户具有默认角色“用户” .

谢谢!

好的,我设法以这种方式设置默认角色:

after_create :assign_reader_role
private
 def assign_reader_role
  self.add_role "user"
end

这是我的UserControlle:

class UsersController < ApplicationController
  before_filter :authenticate_user!


  def index
    authorize! :index, @user, :message => 'Not authorized as an administrator.'
    @users = User.all
  end

  def show
    @user = User.find(params[:id])
  end

  def update
    authorize! :update, @user, :message => 'Not authorized as an administrator.'
    user = User.find(params[:id])  
   if user.update_attributes(user_params)
     redirect_to users_path, :notice => "User updated."
   else
     redirect_to users_path, :alert => "Unable to update user."
   end
  end

  def destroy
    authorize! :destroy, @user, :message => 'Not authorized as an administrator.'
    user = User.find(params[:id])
   unless user == current_user
    user.destroy
    redirect_to users_path, :notice => "User deleted."
   else
    redirect_to users_path, :notice => "Can't delete yourself."
    end
   end
    private
    def user_params
      params.require(:user).permit(:name, :email)
    end
   end

这是模特 . 用户:class User <ActiveRecord :: Base after_create:assign_reader_role rolify devise:database_authenticatable,:registerable,#:confirmable,:recoverable,:rememberable,:trackable,:validatable

validates_presence_of :name

 private
 def assign_reader_role
    self.add_role "user"
  end
 end

角色:

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles
 belongs_to :resource, :polymorphic => true

  scopify
end

UserController我已经放了!我在哪里可以从表格中获取参数?

1 回答

  • 1

    我想你错过了 role_ids permit

    def user_params
      params.require(:user).permit(:name, :email, :role_ids)
    end
    

相关问题