通过设计委派用户角色的最安全方法是什么?

时间:2015-08-11 01:43:44

标签: ruby-on-rails activerecord devise rails-activerecord

在我正在开发的rails应用程序上,我使用设计进行身份验证设置。我添加了一个名为' role'的用户模型的附加属性。它只是一个整数值,可以控制用户的确切行为。

我面临的问题是我不确定如何安全地分配这些角色。显然,我不能只为其填写注册表单中的字段。我能想到的最安全的方法是在所有帐户上强制将值设置为0,在创建新的管理员帐户时,我会在数据库中手动设置它,但这似乎是任何想法的草率?

2 个答案:

答案 0 :(得分:0)

我相信有两种方法可以解决您的问题:

  1. 从rails控制台执行此操作,如果是必须标记某些用户admin的情况之一。
  2. 构建功能,将用户标记为应用程序的管理员,仅向管理员而非常规用户公开。最初通过rails控制台将用户标记为管理员,然后这些用户可以使用该应用程序上的功能将其他人标记为管理员。

答案 1 :(得分:0)

在视图方面(在自定义user#edit操作中),您可以将该字段包装在if语句中:

<% if current_user.role > 3 %>
  ...field(s) go here...
<% end %>

在您的控制器中(在自定义user#update操作中),您可以使用类似的语句过滤掉该参数,如果由于某种原因它在不应该传递时传递:

if current_user.role <= 3
  params[:user][:role].delete
end

当然,我只是猜测“admin”角色是4,所以用正确的值替换它。您必须手动更改控制台中的第一个user角色。