2016-08-17 9 views
1

私は工夫を使用していると私は管理者のみは、新しいユーザーを作成することを可能にします。私はすでにThis答えを見直しましたが、古くなっています。私は非常に多くの可能な答えを試みたが、何も働かなかった。私はまだ初心者のように少し詳細な答えを探しています。ONLY Adminsに新しいユーザーを作成させる方法を教えてください。

管理者はユーザーテーブルのブール値でラベル付けされています私は物事を最小限に抑えようとしています。

答えて

1

これはさまざまな方法で達成できます。私が過去に行ったことは、ビュー内のリンクを隠すこととコントローラ内のユーザーをチェックすることの組み合わせです。私はあなたがユーザコントローラに提出するユーザの詳細を持つフォームを持っていると仮定しました。

私は以下に働いていた1つのアプリからコントローラを含めました。

私が最初に行うことは、ユーザーが認証されているかどうかを確認することです(Googleではこれを使用しますが、あなたが設定した場合は必要ありません。あなたの "role"属性を含むべきログインしている場合、Deviseはcurrent_userオブジェクトを作成しています。標準のユーザー作成では、現在のuser.roleを確認して、current_user.roleが1でない場合にリダイレクトすることができます(1はadminを意味します)。

class UsersController < ApplicationController 

    # Set the user record before each action 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 

    # User must authenticate to use all actions in the users controller 
    before_filter :authenticate_user! 

    def create 
    if current_user.role = 1 then 
     @user = User.new(user_params) 
     @user.password = Devise.friendly_token[0,20] 

     respond_to do |format| 
     if @user.save 
      format.html { redirect_to @user, notice: 'User was successfully created.' } 
      format.json { render action: 'show', status: :created, location: @user } 
     else 
      format.html { render action: 'new' } 
      format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
     end 
    else 
     format.html { redirect_to @user, notice: 'You do not have sufficient rights to set up a new user.' } 
    end 
    end 

    private 

    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
    @user = User.find(params[:id]) 

    rescue ActiveRecord::RecordNotFound 
    flash[:notice] = "User record does not exist" 
    redirect_to users_url 
    end 
end 
+0

私はユーザーのパラメータを自分で追加しました。それはうまくいっていました。私はdeviseコントローラから継承すると思っていましたが、このクラスはアプリケーションコントローラクラスから継承しています。とにかくありがとう。あなたの答えはまだ完了していません、respond_toには終了タグがありません。それを正解としてマークするように編集する – Opapadaia

1

まあそれを行うための最も簡単な方法は、作成、編集、および他の任意のアクションはあなたが作成し、ユーザーのプライベートメソッドを定義することができ、特定の基準

before_action :create_user , only: [:edit , :update , :new, :correct_user] 

してからにしたいユーザーコントローラの制限にbefore_actionを追加することです

def create_user 

    @user=User.find(params[:id]) 
    redirect_to @user unless @user.criteria == criteria 
    end 

ご希望のものがあります。詳細については、コメントしてください。

+0

しかし、deviseにはユーザーコントローラがありません – Opapadaia

+0

これはコントローラがどこにあるのかを見つけるのに役立ちます。 http://stackoverflow.com/questions/6234045/how-do-you-access-devise-controllers –

+0

新しいユーザーを作成するためにlink_toをクリックするたびに、「あなたはすでにサインインしています」というエラーメッセージが返されます – Opapadaia

1
# 
# In Users_Controller 
# 
before_action :check_user_role , only: [:edit , :update , :new, :create] 

def check_user_role 
    redirect_to home_path if current_user.role != "Your Role" 
end 
+0

まだ動作していない "あなたはすでにサインインしている"と言い続ける – Opapadaia

+0

今何が起こっているのですか? –

関連する問題