确保管理员帐户无法删除

时间:2014-03-05 06:03:27

标签: ruby-on-rails

我是第二年本科设计铁路项目的红宝石 婚礼。

我在很多代码上苦苦挣扎但是我有一个主要的事情 不明白该怎么做是为了确保管理员不删除他们的 在目前的情况下,在此过程中拥有自己的帐户。

有人可以帮帮我吗?我知道这是用户内部的代码 controller.rb有“def destroy”但我不知道怎么回事 这样做。

这是我到目前为止的代码:

  def destroy
@user = User.find(params[:id])
if not user.role = 'admin'
@user.destroy
else 
respond_to do |format|
    format.html { redirect_to users_path, 
notice: "#{@user.name} is an admin. You do not have permission to delete this user" }
  format.json { head :no_content }
end

谢谢

3 个答案:

答案 0 :(得分:2)

我强烈建议将所有逻辑提取到实例方法中。通过这种方式,您将来可以更轻松地使用和实施新规则。

user.rb文件中:

def safe_destroy
  return false if admin?
  destroy
end

def admin?
  role == 'admin'
end

在您的控制器中:

def destroy
  @user = User.find(params[:id])
  if @user.safe_destroy
    # do something
  else
    # do something else
  end
end

答案 1 :(得分:1)

问题出在这一行

if not user.role = 'admin'

应为==

unless user.role == 'admin'

答案 2 :(得分:1)

一些事情

首先,当用户不是管理员时,您需要进行重定向。 如果user.role!='admin'

,我也会使用语法
if user.role != 'admin'
  @user.destroy
  redirect_to users_path
else

迈克尔