Как создать модель агента, которая может охватывать все компании в многопользовательском приложении на основе областей в Rails - PullRequest
0 голосов
/ 09 января 2019

Я создал мультитенантное приложение с User & Report, принадлежащим Company, как показано ниже (мультитенантное приложение, использующее company_id для охвата всего остального - Пользователи и отчеты).

company.rb

class Company < ApplicationRecord
    has_many :reports
    has_many :users
end

user.rb

class User < ApplicationRecord
    belongs_to :company
    has_many :reports
end

report.rb

class Report < ApplicationRecord
    belongs_to :user
    belongs_to :company
end

Теперь я хочу добавить модель Agencyagency_users), которая позволит управлять несколькими компаниями (и отчеты компаний). Агент должен иметь возможность переключаться с одной компании на другую.

Как бы я подошел к этому? Агент имеет много компаний

class Agent < ApplicationRecord
    has_many :companies
end

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

1 Ответ

0 голосов
/ 09 января 2019

Основываясь на комментарии, вот решение, которое может быть полезным

class Agency < ApplicationRecord
  has_many :companies
  has_many :users
end

class Company < ApplicationRecord
    has_many :reports
    belongs_to :agency
end

class Users < ApplicationRecord
    has_many :reports
    belongs_to :agency
    enum role: [:agent]
end

Теперь, когда пользователь входит в ваше приложение, покажите ему список компаний, которыми он в данный момент управляет. Сохраните это id в сеансе и используйте его для запроса ваших данных:

current_user.reports.where(company_id: session[:company_id].to_i) например;

То же самое относится и к их созданию и удалению.

Однако это не оптимальное решение (я не уверен, каковы ваши намерения).

Я бы выбрал нечто более общее, например, роли пользователей для каждой компании, в которых UserCompany имеет company, user и role вместо role на уровне пользователя (возможно, он агент в компания, но администратор другой компании и т.д ...). Все это зависит от того, что вам действительно нужно сделать.

...