我正在阅读 Michael Hartl 的 Rails 教程,并且在创建管理员用户时弹出了一个问题。
我按照说明创建了一个 admin_user,他可以访问 :destroy 方法。它也不是 attr_accessible,因此人们不能简单地通过浏览器发出 put 请求并将自己更改为 admin。
但是,我有一个两部分的问题——
1)我将如何使用户管理员?
我虽然我需要在控制台中写这样的东西
rails console
user = User.find(params[:101])
user.toggle!(:admin)
当我尝试时,我得到
main:Object 的未定义局部变量或方法“参数”
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
非常感谢您帮助清理问题!