mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-20 12:04:31 +08:00
Change Dashboard::RecentWorkService to use new user roles [SCI-6134]
This commit is contained in:
parent
362658021e
commit
bc806f0c86
3 changed files with 108 additions and 13 deletions
|
@ -4,6 +4,7 @@ class Project < ApplicationRecord
|
||||||
include SearchableByNameModel
|
include SearchableByNameModel
|
||||||
include ViewableModel
|
include ViewableModel
|
||||||
include PermissionCheckableModel
|
include PermissionCheckableModel
|
||||||
|
include PermissionExtends
|
||||||
include Assignable
|
include Assignable
|
||||||
|
|
||||||
enum visibility: { hidden: 0, visible: 1 }
|
enum visibility: { hidden: 0, visible: 1 }
|
||||||
|
@ -153,7 +154,7 @@ class Project < ApplicationRecord
|
||||||
'user_assignments.user_id = :user_id OR '\
|
'user_assignments.user_id = :user_id OR '\
|
||||||
'(user_teams.user_id = :user_id AND user_teams.role = 2)',
|
'(user_teams.user_id = :user_id AND user_teams.role = 2)',
|
||||||
user_id: user.id)
|
user_id: user.id)
|
||||||
.where('user_roles.permissions @> ARRAY[?]::varchar[]', %w[project_read])
|
.where('user_roles.permissions @> ARRAY[?]::varchar[]', [ProjectPermissions::READ])
|
||||||
.distinct
|
.distinct
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
module Dashboard
|
module Dashboard
|
||||||
class RecentWorkService
|
class RecentWorkService
|
||||||
|
include PermissionExtends
|
||||||
include InputSanitizeHelper
|
include InputSanitizeHelper
|
||||||
include Rails.application.routes.url_helpers
|
include Rails.application.routes.url_helpers
|
||||||
|
|
||||||
|
@ -12,18 +13,39 @@ module Dashboard
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
visible_projects = Project.viewable_by_user(@user, @team)
|
all_activities = @team.activities.where(owner_id: @user.id)
|
||||||
|
all_activities = join_project_user_roles(all_activities)
|
||||||
|
all_activities = join_experiment_user_roles(all_activities)
|
||||||
|
all_activities = join_my_module_user_roles(all_activities)
|
||||||
|
all_activities = join_result_user_roles(all_activities)
|
||||||
|
all_activities = join_protocol_user_roles(all_activities)
|
||||||
|
all_activities = join_step_user_roles(all_activities)
|
||||||
|
|
||||||
activities = Activity.where(owner_id: @user.id)
|
team_activities = all_activities.where(subject_type: %w(Team RepositoryBase ProjectFolder))
|
||||||
.where('((project_id IS NULL AND team_id = ?) OR project_id IN (?))',
|
project_activities = all_activities.where('project_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
@team.id,
|
[ProjectPermissions::ACTIVITIES_READ])
|
||||||
visible_projects.pluck(:id))
|
experiment_activities = all_activities.where('experiment_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
.where.not(type_of: Extends::DASHBOARD_BLACKLIST_ACTIVITY_TYPES)
|
[ExperimentPermissions::ACTIVITIES_READ])
|
||||||
.select('MAX(created_at) AS last_change',
|
my_module_activities = all_activities.where('my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
:subject_id,
|
[MyModulePermissions::ACTIVITIES_READ])
|
||||||
:subject_type)
|
result_activities = all_activities.where('result_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
.group(:subject_id, :subject_type)
|
[MyModulePermissions::ACTIVITIES_READ])
|
||||||
.order(last_change: :desc)
|
protocol_activities = all_activities.where('protocol_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
|
[MyModulePermissions::ACTIVITIES_READ])
|
||||||
|
step_activities = all_activities.where('protocol_my_module_user_roles.permissions @> ARRAY[?]::varchar[]',
|
||||||
|
[MyModulePermissions::ACTIVITIES_READ])
|
||||||
|
|
||||||
|
activities = team_activities.or(project_activities)
|
||||||
|
.or(experiment_activities)
|
||||||
|
.or(my_module_activities)
|
||||||
|
.or(result_activities)
|
||||||
|
.or(protocol_activities)
|
||||||
|
.or(step_activities)
|
||||||
|
|
||||||
|
activities = activities.where.not(type_of: Extends::DASHBOARD_BLACKLIST_ACTIVITY_TYPES)
|
||||||
|
.select('MAX(activities.created_at) AS last_change', :subject_id, :subject_type)
|
||||||
|
.group(:subject_id, :subject_type)
|
||||||
|
.order(last_change: :desc)
|
||||||
|
|
||||||
query = Activity.from("(#{activities.to_sql}) AS activities")
|
query = Activity.from("(#{activities.to_sql}) AS activities")
|
||||||
.results_joins
|
.results_joins
|
||||||
|
@ -103,6 +125,74 @@ module Dashboard
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def join_project_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN projects project_subjects
|
||||||
|
ON project_subjects.id = activities.subject_id AND activities.subject_type='Project'")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments project_user_assignments
|
||||||
|
ON project_user_assignments.assignable_type = 'Project'
|
||||||
|
AND project_user_assignments.assignable_id = project_subjects.id
|
||||||
|
LEFT OUTER JOIN user_roles project_user_roles
|
||||||
|
ON project_user_roles.id = project_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
|
def join_experiment_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN experiments experiment_subjects
|
||||||
|
ON experiment_subjects.id = activities.subject_id AND activities.subject_type='Experiment'")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments experiment_user_assignments
|
||||||
|
ON experiment_user_assignments.assignable_type = 'Experiment'
|
||||||
|
AND experiment_user_assignments.assignable_id = experiment_subjects.id
|
||||||
|
LEFT OUTER JOIN user_roles experiment_user_roles
|
||||||
|
ON experiment_user_roles.id = experiment_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
|
def join_my_module_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN my_modules my_module_subjects
|
||||||
|
ON my_module_subjects.id = activities.subject_id AND activities.subject_type='MyModule'")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments my_module_user_assignments
|
||||||
|
ON my_module_user_assignments.assignable_type = 'MyModule'
|
||||||
|
AND my_module_user_assignments.assignable_id = my_module_subjects.id
|
||||||
|
LEFT OUTER JOIN user_roles my_module_user_roles
|
||||||
|
ON my_module_user_roles.id = my_module_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
|
def join_result_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN results result_subjects
|
||||||
|
ON result_subjects.id = activities.subject_id AND activities.subject_type='Result'
|
||||||
|
LEFT OUTER JOIN my_modules result_my_modules
|
||||||
|
ON result_subjects.my_module_id = result_my_modules.id")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments result_my_module_user_assignments
|
||||||
|
ON result_my_module_user_assignments.assignable_type = 'MyModule'
|
||||||
|
AND result_my_module_user_assignments.assignable_id = result_my_modules.id
|
||||||
|
LEFT OUTER JOIN user_roles result_my_module_user_roles
|
||||||
|
ON result_my_module_user_roles.id = result_my_module_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
|
def join_protocol_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN protocols protocol_subjects
|
||||||
|
ON protocol_subjects.id = activities.subject_id AND activities.subject_type='Protocol'
|
||||||
|
LEFT OUTER JOIN my_modules protocol_my_modules
|
||||||
|
ON protocol_subjects.my_module_id = protocol_my_modules.id")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments protocol_my_module_user_assignments
|
||||||
|
ON protocol_my_module_user_assignments.assignable_type = 'MyModule'
|
||||||
|
AND protocol_my_module_user_assignments.assignable_id = protocol_my_modules.id
|
||||||
|
LEFT OUTER JOIN user_roles protocol_my_module_user_roles
|
||||||
|
ON protocol_my_module_user_roles.id = protocol_my_module_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
|
def join_step_user_roles(activities)
|
||||||
|
activities.joins("LEFT OUTER JOIN steps step_subjects
|
||||||
|
ON step_subjects.id = activities.subject_id AND activities.subject_type='Step'
|
||||||
|
LEFT OUTER JOIN protocols step_protocols
|
||||||
|
ON step_subjects.protocol_id = step_protocols.id
|
||||||
|
LEFT OUTER JOIN my_modules step_my_modules
|
||||||
|
ON step_protocols.my_module_id = step_my_modules.id")
|
||||||
|
.joins("LEFT OUTER JOIN user_assignments step_my_module_user_assignments
|
||||||
|
ON step_my_module_user_assignments.assignable_type = 'MyModule'
|
||||||
|
AND step_my_module_user_assignments.assignable_id = step_my_modules.id
|
||||||
|
LEFT OUTER JOIN user_roles step_my_module_user_roles
|
||||||
|
ON step_my_module_user_roles.id = step_my_module_user_assignments.user_role_id")
|
||||||
|
end
|
||||||
|
|
||||||
def generate_url(recent_object)
|
def generate_url(recent_object)
|
||||||
object_id = recent_object[:group_id].gsub(/[^0-9]/, '')
|
object_id = recent_object[:group_id].gsub(/[^0-9]/, '')
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ module PermissionExtends
|
||||||
module MyModulePermissions
|
module MyModulePermissions
|
||||||
%w(
|
%w(
|
||||||
READ
|
READ
|
||||||
|
ACTIVITIES_READ
|
||||||
MANAGE
|
MANAGE
|
||||||
STEPS_MANAGE
|
STEPS_MANAGE
|
||||||
UPDATE_STATUS
|
UPDATE_STATUS
|
||||||
|
@ -105,6 +106,7 @@ module PermissionExtends
|
||||||
ExperimentPermissions::TASKS_MANAGE,
|
ExperimentPermissions::TASKS_MANAGE,
|
||||||
ExperimentPermissions::USERS_MANAGE,
|
ExperimentPermissions::USERS_MANAGE,
|
||||||
MyModulePermissions::READ,
|
MyModulePermissions::READ,
|
||||||
|
MyModulePermissions::ACTIVITIES_READ,
|
||||||
MyModulePermissions::MANAGE,
|
MyModulePermissions::MANAGE,
|
||||||
MyModulePermissions::RESULTS_MANAGE,
|
MyModulePermissions::RESULTS_MANAGE,
|
||||||
MyModulePermissions::PROTOCOL_MANAGE,
|
MyModulePermissions::PROTOCOL_MANAGE,
|
||||||
|
@ -140,6 +142,7 @@ module PermissionExtends
|
||||||
ExperimentPermissions::ACTIVITIES_READ,
|
ExperimentPermissions::ACTIVITIES_READ,
|
||||||
ExperimentPermissions::USERS_READ,
|
ExperimentPermissions::USERS_READ,
|
||||||
MyModulePermissions::READ,
|
MyModulePermissions::READ,
|
||||||
|
MyModulePermissions::ACTIVITIES_READ,
|
||||||
MyModulePermissions::COMMENTS_CREATE,
|
MyModulePermissions::COMMENTS_CREATE,
|
||||||
MyModulePermissions::COMMENTS_MANAGE_OWN,
|
MyModulePermissions::COMMENTS_MANAGE_OWN,
|
||||||
MyModulePermissions::COMPLETE,
|
MyModulePermissions::COMPLETE,
|
||||||
|
@ -166,7 +169,8 @@ module PermissionExtends
|
||||||
ExperimentPermissions::READ_ARCHIVED,
|
ExperimentPermissions::READ_ARCHIVED,
|
||||||
ExperimentPermissions::ACTIVITIES_READ,
|
ExperimentPermissions::ACTIVITIES_READ,
|
||||||
ExperimentPermissions::USERS_READ,
|
ExperimentPermissions::USERS_READ,
|
||||||
MyModulePermissions::READ
|
MyModulePermissions::READ,
|
||||||
|
MyModulePermissions::ACTIVITIES_READ
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue