diff --git a/app/controllers/access_permissions/base_controller.rb b/app/controllers/access_permissions/base_controller.rb index aeb4f566f..4912fbed0 100644 --- a/app/controllers/access_permissions/base_controller.rb +++ b/app/controllers/access_permissions/base_controller.rb @@ -134,7 +134,7 @@ module AccessPermissions end def load_available_users - @available_users = current_team.users.where.not(id: @model.users.select(:id)).order(users: { full_name: :asc }) + @available_users = current_team.users.where.not(id: @model.user_assignments.select(:user_id)).order(users: { full_name: :asc }) end def propagate_job(destroy: false) diff --git a/app/models/concerns/assignable.rb b/app/models/concerns/assignable.rb index 7dfe2d640..269d1ba07 100644 --- a/app/models/concerns/assignable.rb +++ b/app/models/concerns/assignable.rb @@ -56,6 +56,21 @@ module Assignable after_create :create_users_assignments + def users + direct_user_ids = user_assignments.select(:user_id) + + # Users through user_groups assigned + group_user_ids = UserGroupMembership.joins(:user_group) + .where(user_group_id: UserGroupAssignment.where(assignable: self).select(:user_group_id)) + .select(:user_id) + + # Users through teams assigned + team_user_ids = UserAssignment.where(assignable_id: team_assignments.select(:team_id), assignable_type: 'Team') + .select(:user_id) + + User.where(id: direct_user_ids).or(User.where(id: group_user_ids)).or(User.where(id: team_user_ids)) + end + def default_public_user_role_id team_assignments.where(team_id: team.id).pick(:user_role_id) end diff --git a/app/models/experiment.rb b/app/models/experiment.rb index 6afc0c092..a85b86c7b 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -36,7 +36,6 @@ class Experiment < ApplicationRecord has_many :report_elements, inverse_of: :experiment, dependent: :destroy # Associations for old activity type has_many :activities, inverse_of: :experiment - has_many :users, through: :user_assignments, dependent: :destroy has_one_attached :workflowimg diff --git a/app/models/form.rb b/app/models/form.rb index 2536d95a3..ed214ac36 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -22,7 +22,6 @@ class Form < ApplicationRecord has_many :form_fields, -> { order(:position) }, inverse_of: :form, dependent: :destroy has_many :form_responses, dependent: :destroy - has_many :users, through: :user_assignments scope :published, -> { where.not(published_on: nil) } diff --git a/app/models/my_module.rb b/app/models/my_module.rb index 47cffeca6..c967c73e7 100644 --- a/app/models/my_module.rb +++ b/app/models/my_module.rb @@ -70,7 +70,6 @@ class MyModule < ApplicationRecord has_many :repository_rows, through: :my_module_repository_rows has_many :repository_snapshots, dependent: :destroy, inverse_of: :my_module has_many :user_my_modules, inverse_of: :my_module, dependent: :destroy - has_many :users, through: :user_assignments has_many :designated_users, through: :user_my_modules, source: :user has_many :report_elements, inverse_of: :my_module, dependent: :destroy has_many :protocols, inverse_of: :my_module, dependent: :destroy diff --git a/app/models/project.rb b/app/models/project.rb index 2d166de44..40caba82f 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -58,7 +58,6 @@ class Project < ApplicationRecord belongs_to :team, inverse_of: :projects, touch: true belongs_to :project_folder, inverse_of: :projects, optional: true, touch: true has_many :user_projects, inverse_of: :project - has_many :users, through: :user_assignments has_many :experiments, inverse_of: :project has_many :active_experiments, -> { where(archived: false) }, class_name: 'Experiment' diff --git a/app/models/protocol.rb b/app/models/protocol.rb index e1a9aec81..eae4bf29f 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -141,7 +141,6 @@ class Protocol < ApplicationRecord has_many :protocol_keywords, through: :protocol_protocol_keywords has_many :steps, inverse_of: :protocol, dependent: :destroy has_many :original_steps, class_name: 'Step', foreign_key: :original_protocol_id, inverse_of: :original_protocol, dependent: :nullify - has_many :users, through: :user_assignments def self.search(user, include_archived, diff --git a/app/models/report.rb b/app/models/report.rb index 54e764a48..7459ce259 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -29,7 +29,6 @@ class Report < ApplicationRecord belongs_to :user, inverse_of: :reports belongs_to :team, inverse_of: :reports belongs_to :last_modified_by, class_name: 'User', optional: true - has_many :users, through: :user_assignments has_many :report_template_values, dependent: :destroy # Report either has many report elements (if grouped by timestamp), diff --git a/app/models/repository.rb b/app/models/repository.rb index 4e63e9c0d..02d39e302 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -29,7 +29,6 @@ class Repository < RepositoryBase inverse_of: :original_repository has_many :repository_ledger_records, as: :reference, dependent: :nullify has_many :repository_table_filters, dependent: :destroy - has_many :users, through: :user_assignments before_save :sync_name_with_snapshots, if: :name_changed? before_destroy :refresh_report_references_on_destroy, prepend: true diff --git a/app/models/team.rb b/app/models/team.rb index 7aea00ef7..e1060cc75 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -26,7 +26,6 @@ class Team < ApplicationRecord belongs_to :created_by, class_name: 'User', optional: true belongs_to :last_modified_by, class_name: 'User', optional: true - has_many :users, through: :user_assignments, dependent: :destroy has_many :user_groups, dependent: :destroy has_many :projects, inverse_of: :team, dependent: :destroy has_many :project_folders, inverse_of: :team, dependent: :destroy diff --git a/spec/models/my_module_spec.rb b/spec/models/my_module_spec.rb index 58cf7c185..98dfb55f6 100644 --- a/spec/models/my_module_spec.rb +++ b/spec/models/my_module_spec.rb @@ -53,7 +53,6 @@ describe MyModule, type: :model do it { should have_many :my_module_repository_rows } it { should have_many :repository_rows } it { should have_many :user_my_modules } - it { should have_many :users } it { should have_many :activities } it { should have_many :report_elements } it { should have_many :protocols } diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index d9c6d507b..d70a2095a 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -45,7 +45,6 @@ describe Project, type: :model do it { should belong_to(:restored_by).class_name('User').optional } it { should belong_to(:supervised_by).class_name('User').optional } it { should have_many :user_projects } - it { should have_many :users } it { should have_many :experiments } it { should have_many :project_comments } it { should have_many :activities } diff --git a/spec/models/team_spec.rb b/spec/models/team_spec.rb index b50e79edb..e302d8fee 100644 --- a/spec/models/team_spec.rb +++ b/spec/models/team_spec.rb @@ -27,7 +27,6 @@ describe Team, type: :model do describe 'Relations' do it { should belong_to(:created_by).class_name('User').optional } it { should belong_to(:last_modified_by).class_name('User').optional } - it { should have_many :users } it { should have_many :projects } it { should have_many :protocols } it { should have_many :protocol_keywords }