私は工夫を使用していると私は管理者のみは、新しいユーザーを作成することを可能にします。私はすでにThis答えを見直しましたが、古くなっています。私は非常に多くの可能な答えを試みたが、何も働かなかった。私はまだ初心者のように少し詳細な答えを探しています。ONLY Adminsに新しいユーザーを作成させる方法を教えてください。
管理者はユーザーテーブルのブール値でラベル付けされています私は物事を最小限に抑えようとしています。
私は工夫を使用していると私は管理者のみは、新しいユーザーを作成することを可能にします。私はすでにThis答えを見直しましたが、古くなっています。私は非常に多くの可能な答えを試みたが、何も働かなかった。私はまだ初心者のように少し詳細な答えを探しています。ONLY Adminsに新しいユーザーを作成させる方法を教えてください。
管理者はユーザーテーブルのブール値でラベル付けされています私は物事を最小限に抑えようとしています。
これはさまざまな方法で達成できます。私が過去に行ったことは、ビュー内のリンクを隠すこととコントローラ内のユーザーをチェックすることの組み合わせです。私はあなたがユーザコントローラに提出するユーザの詳細を持つフォームを持っていると仮定しました。
私は以下に働いていた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
まあそれを行うための最も簡単な方法は、作成、編集、および他の任意のアクションはあなたが作成し、ユーザーのプライベートメソッドを定義することができ、特定の基準
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
ご希望のものがあります。詳細については、コメントしてください。
#
# 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
まだ動作していない "あなたはすでにサインインしている"と言い続ける – Opapadaia
今何が起こっているのですか? –
私はユーザーのパラメータを自分で追加しました。それはうまくいっていました。私はdeviseコントローラから継承すると思っていましたが、このクラスはアプリケーションコントローラクラスから継承しています。とにかくありがとう。あなたの答えはまだ完了していません、respond_toには終了タグがありません。それを正解としてマークするように編集する – Opapadaia