【问题标题】:Rails + Rolify Gem: Assigning an :admin role to ALL users in a tableRails + Rolify Gem:为表中的所有用户分配 :admin 角色
【发布时间】:2015-08-19 22:13:00
【问题描述】:

我正在使用 Rolify gem (https://github.com/RolifyCommunity/rolify) 为我的网络应用程序的用户分配角色。

我从文档中了解到,我可以这样做来为单个用户记录分配角色:

user = User.find(1)
user.add_role :admin

这很好,我正在使用正在创建的新帐户做什么。但是,如何将:admin 角色分配给我的用户表中的所有用户?

我尝试在我的 Rails 控制台中使用它,但没有任何运气。

【问题讨论】:

  • 您想为当前在您数据库中的所有用户分配管理员角色吗?

标签: ruby-on-rails ruby-on-rails-4 rolify


【解决方案1】:

假设你有users

#= select * from users;
 id |   name   |         created_at         |         updated_at
----+----------+----------------------------+----------------------------
  1 | Kristján | 2015-06-05 04:47:58.037205 | 2015-06-05 04:47:58.037205

roles

#= select * from roles;
 id | name  | resource_id | resource_type |         created_at         |         updated_at
----+-------+-------------+---------------+----------------------------+----------------------------
  1 | admin |           ∅ | ∅             | 2015-06-05 04:50:27.015613 | 2015-06-05 04:50:27.015613

你的连接表是users_roles

#= \d users_roles
  Table "public.users_roles"
 Column  |  Type   | Modifiers
---------+---------+-----------
 user_id | integer |
 role_id | integer |

您可以为每个用户插入一个admin 角色

#= insert into users_roles select id, 1 from users;

或者,如果您更喜欢从 Rails 控制台执行此操作(如果有很多记录,请耐心等待):

User.find_each { |user| user.add_role :admin }

【讨论】:

  • 嗨 Kristjan,这对我有用!我有一个问题......说我有一个用户和客户表。然后我想将一个角色应用于其电子邮件也存在于客户表中的用户。我该怎么做?
  • 简单的方法是在查询中添加一个条件:where users.email in (select email from customers)。或者在 Ruby 中 user.add_role :admin if Customer.exists?(email: user.email).
猜你喜欢
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 2019-06-17
相关资源
最近更新 更多