以管理员用户身份创建用户帐户

时间:2014-04-22 04:06:42

标签: ruby-on-rails-4

我有一个网站,可以通过两种方式创建用户帐户:新用户(注册)和管理员用户。由于在每种情况下创建的处理方式不同,我决定将逻辑拆分为两个独立的函数。我有一个有效的实现,但我对Rails很新,所以我不知道它是否健壮且安全。我正在寻找有关如何改进它的反馈。

users_controller.rb

before_action :signed_in_user, only: [:home, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: [:create_by_admin, :destroy]

.
.
.

def new
    if !signed_in?
        @user = User.new
        @user.confirmation_code = User.new_confirmation_code
    elsif signed_in? && current_user.admin?
        @user = User.new
        render 'new_by_admin' # basically a new.html.erb but with a dropdown for the admin setting
    else
        redirect_to root_url
    end
end

def create
    if signed_in?
        redirect_to root_url
    elsif signed_in? && current_user.admin?
        create_by_admin
    else
        create_by_user
    end
end

def create_by_user
    @user = User.new(user_params)
    if @user.save
        UserMailer.confirmation_email(@user).deliver
        flash[:success] = "Great! Now check your email for activation instructions."
        redirect_to root_url
    else
        render 'new'
    end
end

def create_by_admin
    @user = User.new(admin_params)
    if @user.save
        @user.update_attributes(confirmed: true)
        flash[:success] = "User for " + @user.name + " created."
        redirect_to users_path
    else
        render 'new_by_admin'
    end
end

.
.
.

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

    def admin_params
        params.require(:user).permit(:name, :email, :password, :password_confirmation, :admin)
    end

基本上,所有创建请求都被路由到创建操作,并从那里发送到适当的方法(取决于请求用户是新用户还是作为管理员的现有用户)。这些方法之间的区别在于新用户收到电子邮件以在注册时激活他们的帐户,并且无法将自己设置为管理员,而管理员用户创建已经确认的帐户并可以将其设置为管理员。

这是一种愚蠢的方式吗?我应该创建一个处理所有管理请求的admin_controller吗?

0 个答案:

没有答案