【问题标题】:Is there a way to use the Rolify gem in a multi-tenant setup?有没有办法在多租户设置中使用 Rolify gem?
【发布时间】:2018-09-13 11:50:24
【问题描述】:
我喜欢 Rolify (https://github.com/RolifyCommunity/rolify) API,并希望在我的应用程序中使用它,但在查找它的文档或教程中的任何内容时遇到问题,这些内容允许我定义一个作用域为 params[:account_id ] && 一个资源实例。有没有人以这种方式使用过 Rolify 并且可以提供有关如何设置的建议?
理想情况下,这看起来像
user.add_role :moderator, Notes.where(account_id: params[:account_id])
【问题讨论】:
标签:
ruby-on-rails
ruby
permissions
roles
rolify
【解决方案1】:
我们在生产环境中有一个多租户 Rails 应用程序,它使用 Acts As Tenant 和 Rolify 来处理您描述的用例。有User账户,独立于任何租户,每个用户可以有多个Memberships,从而成为多个租户的成员。
每个用户成员资格都可以有单独的角色。对于较低级别的角色,我们只需要允许访问更多特权成员可以分配给他们的某些实例。
一个好的多租户 gem 应该负责将所有 Rails 模型的范围限定在一个特定的组织中,并防止组织 A 的任何成员访问组织 B 的数据。所以真的不需要使用类似的东西params[:account_id] 手动,当您想要定义一个作用域为资源实例的角色时。
【解决方案2】:
您可以将角色添加到特定实例,如下所示:
note = Notes.where(account_id: params[:account_id].first
user.add_role(:moderator, note)