私は、Michael Hartl による Rails チュートリアルに取り組んでおり、管理者ユーザーを作成していたときに質問が表示されました。
指示に従い、:destroy メソッドにアクセスできる admin_user を作成しました。また、attr_accessible ではないため、ブラウザから put リクエストを送信して、テーマ自体を admin に変更することはできません。
しかし、私は 2 つの部分からなる質問があります--
1) ユーザー管理者を作成するにはどうすればよいですか?
コンソールにこのようなものを書く必要があると思いました
rails console
user = User.find(params[:101])
user.toggle!(:admin)
私がそれを試みるとき、私は得る
main:Object の未定義のローカル変数またはメソッド 'Params'
2) 自分自身を管理者にすることが可能であると仮定すると、他の人がコマンドラインを使用して自分自身を管理者にすることを妨げているのは何ですか?
ここに users_controller のコピーがあります。Michael がチュートリアルでこれに対処したと思います。私は彼の指示に従いましたが、以下のコードによって誰かがコマンド ラインにアクセスして自分自身を管理者にするのを防ぐ方法がわかりません。
class UsersController < ApplicationController
before_filter :signed_in_user,
only: [:edit, :update, :index, :destroy]
before_filter :correct_user, only: [:edit, :update]
before_filter :admin_user, only: :destroy
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed."
redirect_to users_url
end
def index
@users = User.paginate(page: params[:page])
end
def show
@user = User.find(params[:id])
end
def new
unless signed_in?
@user = User.new
else
redirect_to @current_user
end
end
def create
unless signed_in?
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
else
redirect_to @current_user
end
end
def edit
end
def update
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
private
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end
def admin_user
redirect_to(root_path) unless current_user.admin?
end
end
物事を片付けるのを手伝ってくれて本当にありがとう!