1

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

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

谢谢!

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

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

这是我的用户控件:

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

这里是模型。用户:类用户 < 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 我已经放了!我在哪里可以从表单中获取参数?

4

1 回答 1

1

我想你错过role_idspermit

def user_params
  params.require(:user).permit(:name, :email, :role_ids)
end
于 2013-12-25T16:47:12.393 回答