使用strong_parameters解决多个访问情况



我有一个应用程序,在初始帐户设置期间,用户只能访问他们的:name、:lastname、:email属性一次。在此之后(出于安全原因),他们不允许更改这些属性中的任何一个;只有管理员才能。

def user_params
    if current_user && current_user.admin?
      params.require(:user).permit(:name,
                                :surname,
                                :admin)
    else
      params.require(:user).permit()
    end
end

然后在user.create期间,我允许用户填写注册表并访问这些受保护的属性,但在user.update期间,只有管理员可以更改该信息。

由于user_params是为每个方法(new、create、edit、update、show、destroy)调用的,因此如果我仅在帐户创建/验证后才将对这些属性的访问权限限制为Admins,则它将不允许用户写入这些属性并设置帐户。

关于如何解决这个问题有什么想法吗?或者我只是遗漏了strong_parameters的一些内容?

user_params只是一个辅助方法,因此您不必在所有操作中重复相同的代码。如果create中的代码与update中的代码不同,只需创建另一个辅助方法:

def user_create_params
  if current_user && current_user.admin?
    params.require(:user).permit(:name, :surname, :admin)
  else
    params.require(:user).permit(:name, :surname)
  end
end
def user_update_params
  if current_user && current_user.admin?
    params.require(:user).permit(:name, :surname, :admin)
  else
    params.require(:user).permit()
  end
end

相关内容

最新更新