Rolify:一个用户能否将特定的资源角色分配给另一个用户?

Rolify: Can a User assign a specific Resource Role to another User?

我正在尝试确定在使用 Rolify(使用 Devise 和 CanCanCan)时此流程是否可行...如果可行,将如何实施:

我有一个class,Shop,属于User。我希望创建相应 Shop 实例的用户能够将 Rolify 角色 (:manager) 分配给任何用户 (N.B。任何创建实例的用户都应该能够分配角色 - 不仅仅是具有角色 :admin).

的用户

我知道这可以通过 rails 控制台通过 add_role 命令实现(例如,使用带有 id: 5Shop 实例):

user.add_role :manage, Shop.find(5)

但我不清楚这是否可以由个人用户以编程方式完成 - 一个用户可以将角色分配给另一个用户。具体来说,通过从可搜索的下拉表单中选择用户并在提交时分配角色。

虽然我还没有任何值得展示/有助于展示的代码,但我希望在这里得到关于如何最好地解决这个问题的指导(例如,是否应该在 shops_controller.rb 或在它自己的控制器中?)。另外,是否完全放弃使用 Rolify 并为 shops_managers 创建一个连接 table 会更好?

如果有帮助,这里是 Ability.rb class:

    class Ability
      include CanCan::Ability

      def initialize(user)
        if user
          if user.has_role? :admin
            can :manage, :all
          else
            can [:edit, :update], Shop.with_role(:manager, user)
            can :manage, Shop, :user_id => user.id
            can :manage, User, id: user.id
            can :read, :all
          end
        end
      end

非常感谢!

您不需要加入 table 来存储 shops_managers。你有一个榜样:
Role(id: integer, name: string, resource_id: integer, resource_type: string, created_at: datetime, updated_at: datetime)
在 shops#create 中添加角色是完全没问题的:

if @shop.save
  #some code
  @current_user.add_role :manager, @shop  
  #some more code
end

如果你想管理角色,应该在其他控制器中完成。可能在 admins 命名空间中。