Ruby 在 rails。用户模型的管理属性有多安全?

Ruby on rails. How safe is an admin attribute for user model?

我找不到任何明确的答案。 我有一个带有设计的用户模型,我添加了一个 'admin' 属性,它是一个布尔值,默认为 false。目前,我必须转到控制台并手动将属性更改为 true 才能为用户提供此管理员身份。

我的问题是,这有多安全?有人可以在不访问服务器(当前是我的计算机)的情况下更改自己用户的状态吗? 一旦我将站点投入生产,安全性会受到损害吗? admin 属性不是登录、注册或更新时允许的参数。

我想为自己添加一个个人仪表板,以便在网站投入生产时查看、编辑或删除我可能需要的任何内容。

考虑到 Devise,安全是最不可能出错的事情,除非 Rails 或 Devise 中的任何一个被破坏,这不太可能。 您已采取足够的步骤,例如不允许使用 admin 参数,这应该足以应对几乎所有情况。 几个 Rails 应用程序,包括 GitHub 和 Shopify 一直在这样做(可能没有 Devise,但这不是问题),没有安全问题。我自己使用 Devise 和 admin 标志,可以保证它足够安全。

您没有使用 RoleModel 之类的东西的原因是什么?与为每个角色向用户添加属性相比,它将允许您在未来以更易于管理的方式扩展到其他角色。

无论哪种方式...除非您为他们提供更新该字段的方法,否则它应该是安全的。如果你想确保 non-admin 无法更新该字段,你总是可以将这样的内容添加到 UsersController#update:

params[:user].delete(:admin) unless current_user.admin?

如果您使用 strong params,那么仅当您允许从管理面板之外的任何操作设置此属性时才会存在风险。

为了更加安全,您可以使用 attr_readonly,这样您只能在创建对象时设置此属性。