Как я могу управлять ролями с точки зрения экземпляра ресурсов с помощью rolify?

#ruby-on-rails #ruby #multi-tenant #rolify

Вопрос:

Я пытаюсь создать многопользовательское приложение и использую драгоценный камень rolify для управления ролями, вот мои отношения моделей

  1. У пользователя может быть несколько арендаторов.
  2. У арендаторов может быть несколько пользователей.
  3. У арендаторов может быть несколько документов.
 class Tenant  has_many :members  has_many :users, through: :members  has_many :document end  class User  has_many :members  has_many :tenants, through: :members end  class Document  belongs_to :tenant end  

и я хочу добавить некоторые роли для управления арендаторами и документами в соответствии с документацией, которую я должен реализовать, как показано ниже

 # add role to manage tenant user.add_role(:admin, Tenant.find(1)) user.add_role(:member, Tenant.find(2))  
 # add role to manage document user.add_role(:edit, Document.find(1)) user.add_role(:view_only, Document.find(2))  

но мне интересно, могу ли я разделить таблицу ролей по разным ресурсам примерно так

 class Tenant  rolify :role_cname =gt; 'TenantRole' end  class Document  rolify :role_cname =gt; 'DocumentRole' end  tenant = Tenant.find(1) tenant.add_role(:admin, User.find(1)) tenant.add_role(:admin, User.find(2))  document = Document.find(1) document.add_role(:editor, User.find(1)) document.add_role(:view_only, User.find(2))  

причина, по которой я хочу поступить так, заключается в том, что Я предполагаю, что пользователи могут иметь много арендаторов, а также принадлежность к различным арендаторам, в то же время, пользователи могут иметь разные роли для каждого документа арендаторов если я всегда добавляю роли с точки зрения пользователя, я волнуюсь ли я, добавляя слишком много данных в таблицу (табл роль), и это может вызвать проблемы с производительностью, когда я делаю запросы, и другая причина, я думаю, отдельная роль стола ресурсов легче управлять роль ресурсов

есть ли какие-нибудь советы по этому делу? Спасибо

Комментарии:

1. Мой совет здесь — не используйте Rolify-это выходит за рамки того, для чего он предназначен, и вы просто будете бороться с этим. Это хороший маленький инструмент для простых случаев использования, но он использует единую таблицу ролей и ассоциацию HABTM, поэтому вы не можете напрямую запрашивать таблицу соединений. Он также использует полиморфную ассоциацию, которая может ограничить нетерпеливую загрузку. Его довольно легко просто настроить ряд отдельных таблиц и воспроизвести необходимую функциональность.

2. Мой второй совет: не засовывайте все в свою систему ролей — используйте Pundit для инкапсуляции логики авторизации и не реализуйте все как роль, поскольку это создает класс бога.