【问题标题】:Rolify: Can a User assign a specific Resource Role to another User?Rolify:用户可以将特定的资源角色分配给另一个用户吗?
【发布时间】:2017-04-20 19:56:47
【问题描述】:

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

我有一个班级Shop,属于User。我希望创建相应 Shop 实例的用户能够将 Rolify 角色 (:manager) 分配给任何用户(注意,任何创建实例的用户都应该能够分配角色 - 而不仅仅是用户谁拥有角色:admin)。

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

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

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

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

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

    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

非常感谢!

【问题讨论】:

    标签: ruby-on-rails ruby devise cancancan rolify


    【解决方案1】:

    您不需要连接表来存储 shop_managers。你有榜样:
    Role(id: integer, name: string, resource_id: integer, resource_type: string, created_at: datetime, updated_at: datetime)
    在 shop#create 中添加角色是完全可以的:

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

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

    【讨论】:

    • 感谢@Anton 的建议 - 我转向了另一个功能,但我会在接下来的一两周内返回它时尝试您的解决方案。会告诉你进展如何。
    • 再次感谢 - 终于能够重新访问并确认上述解决方案有效。标记已接受。
    • 太棒了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多