mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-08 06:04:35 +08:00
Add activities for user groups [SCI-11965]
This commit is contained in:
parent
7a2f44e6e8
commit
1bd43f8eea
10 changed files with 169 additions and 59 deletions
|
@ -58,7 +58,11 @@ module AccessPermissions
|
|||
group: is_group
|
||||
)
|
||||
|
||||
log_change_activity unless is_group
|
||||
if is_group
|
||||
log_activity(:experiment_access_changed_user_group, user_group: @assignment.user_group.id)
|
||||
else
|
||||
log_activity(:change_user_role_on_experiment, user_target: @assignment.user.id)
|
||||
end
|
||||
|
||||
render json: {}, status: :ok
|
||||
end
|
||||
|
@ -88,19 +92,16 @@ module AccessPermissions
|
|||
render_403 unless can_read_experiment?(@experiment)
|
||||
end
|
||||
|
||||
def log_change_activity
|
||||
Activities::CreateActivityService.call(
|
||||
activity_type: :change_user_role_on_experiment,
|
||||
owner: current_user,
|
||||
subject: @experiment,
|
||||
team: @project.team,
|
||||
project: @project,
|
||||
message_items: {
|
||||
experiment: @experiment.id,
|
||||
user_target: @assignment.user_id,
|
||||
role: @assignment.user_role.name
|
||||
}
|
||||
)
|
||||
def log_activity(type_of, message_items = {})
|
||||
message_items = { experiment: @experiment.id, role: @assignment.user_role.name }.merge(message_items)
|
||||
|
||||
Activities::CreateActivityService
|
||||
.call(activity_type: type_of,
|
||||
owner: current_user,
|
||||
subject: @experiment,
|
||||
team: @project.team,
|
||||
project: @project,
|
||||
message_items: message_items)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -53,16 +53,18 @@ module AccessPermissions
|
|||
)
|
||||
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:form_access_granted, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
created_count += 1
|
||||
log_activity(:form_access_granted, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:form_access_granted_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
|
||||
created_count += 1
|
||||
end
|
||||
|
||||
@message = if created_count.zero?
|
||||
t('access_permissions.create.success', member_name: t('access_permissions.all_team'))
|
||||
else
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.user.name))
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.respond_to?(:user_group) ? assignment.user_group.name : assignment.user.name))
|
||||
end
|
||||
render json: { message: @message }
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
|
@ -91,8 +93,9 @@ module AccessPermissions
|
|||
|
||||
assignment.update!(permitted_update_params)
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:form_access_changed, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
log_activity(:form_access_changed, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:form_access_changed_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
render json: { flash: t('access_permissions.update.failure') }, status: :unprocessable_entity
|
||||
|
@ -121,7 +124,12 @@ module AccessPermissions
|
|||
else
|
||||
assignment.destroy!
|
||||
end
|
||||
log_activity(:form_access_revoked, { user_target: assignment.user.id, role: assignment.user_role.name }) unless is_group
|
||||
|
||||
if is_group
|
||||
log_activity(:form_access_revoked_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:form_access_revoked, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
end
|
||||
end
|
||||
|
||||
render json: { message: t('access_permissions.destroy.success', member_name: is_group ? assignment.user_group.name : assignment.user.full_name) }
|
||||
|
|
|
@ -47,7 +47,11 @@ module AccessPermissions
|
|||
)
|
||||
end
|
||||
|
||||
log_change_activity unless @assignment.respond_to?(:user_group)
|
||||
if @assignment.respond_to?(:user_group)
|
||||
log_activity(:my_module_access_changed_user_group, user_group: @assignment.user_group.id)
|
||||
else
|
||||
log_activity(:change_user_role_on_my_module, user_target: @assignment.user.id)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -79,19 +83,16 @@ module AccessPermissions
|
|||
render_403 unless can_read_my_module?(@my_module)
|
||||
end
|
||||
|
||||
def log_change_activity
|
||||
Activities::CreateActivityService.call(
|
||||
activity_type: :change_user_role_on_my_module,
|
||||
owner: current_user,
|
||||
subject: @my_module,
|
||||
team: @project.team,
|
||||
project: @project,
|
||||
message_items: {
|
||||
my_module: @my_module.id,
|
||||
user_target: @assignment.user_id,
|
||||
role: @assignment.user_role.name
|
||||
}
|
||||
)
|
||||
def log_activity(type_of, message_items = {})
|
||||
message_items = { my_module: @my_module.id, role: @assignment.user_role.name }.merge(message_items)
|
||||
|
||||
Activities::CreateActivityService
|
||||
.call(activity_type: type_of,
|
||||
owner: current_user,
|
||||
subject: @my_module,
|
||||
team: @project.team,
|
||||
project: @project,
|
||||
message_items: message_items)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,18 +46,20 @@ module AccessPermissions
|
|||
)
|
||||
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:assign_user_to_project, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
created_count += 1
|
||||
log_activity(:assign_user_to_project, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:project_access_granted_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
|
||||
created_count += 1
|
||||
|
||||
propagate_job(assignment)
|
||||
end
|
||||
|
||||
@message = if created_count.zero?
|
||||
t('access_permissions.create.success', member_name: t('access_permissions.all_team'))
|
||||
else
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.user.name))
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.respond_to?(:user_group) ? assignment.user_group.name : assignment.user.name))
|
||||
end
|
||||
render json: { message: @message }
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
|
@ -85,10 +87,10 @@ module AccessPermissions
|
|||
end
|
||||
|
||||
assignment.update!(permitted_update_params)
|
||||
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:change_user_role_on_project, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
log_activity(:change_user_role_on_project, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:project_access_changed_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
|
||||
propagate_job(assignment)
|
||||
|
@ -120,7 +122,11 @@ module AccessPermissions
|
|||
destroy: true
|
||||
)
|
||||
|
||||
log_activity(:unassign_user_from_project, { user_target: assignment.user.id, role: assignment.user_role.name }) unless is_group
|
||||
if is_group
|
||||
log_activity(:project_access_revoked_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:unassign_user_from_project, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
end
|
||||
|
||||
render json: { message: t('access_permissions.destroy.success', member_name: escape_input(is_group ? assignment.user_group.name : assignment.user.full_name)) }
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
|
|
|
@ -53,16 +53,18 @@ module AccessPermissions
|
|||
)
|
||||
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:protocol_template_access_granted, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
created_count += 1
|
||||
log_activity(:protocol_template_access_granted, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:protocol_template_access_granted_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
|
||||
created_count += 1
|
||||
end
|
||||
|
||||
@message = if created_count.zero?
|
||||
t('access_permissions.create.success', member_name: t('access_permissions.all_team'))
|
||||
else
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.user.name))
|
||||
t('access_permissions.create.success', member_name: escape_input(assignment.respond_to?(:user_group) ? assignment.user_group.name : assignment.user.name))
|
||||
end
|
||||
render json: { message: @message }
|
||||
rescue ActiveRecord::RecordInvalid => e
|
||||
|
@ -91,8 +93,9 @@ module AccessPermissions
|
|||
|
||||
assignment.update!(permitted_update_params)
|
||||
if permitted_create_params[:user_id].present?
|
||||
log_activity(:protocol_template_access_changed, { user_target: assignment.user.id,
|
||||
role: assignment.user_role.name })
|
||||
log_activity(:protocol_template_access_changed, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:protocol_template_access_changed_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
end
|
||||
rescue ActiveRecord::RecordInvalid
|
||||
render json: { flash: t('access_permissions.update.failure') }, status: :unprocessable_entity
|
||||
|
@ -121,7 +124,11 @@ module AccessPermissions
|
|||
else
|
||||
assignment.destroy!
|
||||
end
|
||||
log_activity(:protocol_template_access_revoked, { user_target: assignment.user.id, role: assignment.user_role.name }) unless is_group
|
||||
if is_group
|
||||
log_activity(:protocol_template_access_revoked_user_group, user_group: assignment.user_group.id, role: assignment.user_role.name)
|
||||
else
|
||||
log_activity(:protocol_template_access_revoked, user_target: assignment.user.id, role: assignment.user_role.name)
|
||||
end
|
||||
end
|
||||
|
||||
render json: { message: t('access_permissions.destroy.success', member_name: is_group ? assignment.user_group.name : assignment.user.full_name) }
|
||||
|
|
|
@ -31,6 +31,7 @@ module Users
|
|||
|
||||
new_users.each do |user|
|
||||
@user_group.user_group_memberships.create!(user: user, created_by: current_user)
|
||||
log_activity(:add_group_user_member, user)
|
||||
end
|
||||
|
||||
render json: { message: :success }, status: :created
|
||||
|
@ -44,6 +45,10 @@ module Users
|
|||
def destroy_multiple
|
||||
members = @user_group.user_group_memberships.where(id: params[:membership_ids])
|
||||
|
||||
members.each do |member|
|
||||
log_activity(:remove_group_user_member, member.user)
|
||||
end
|
||||
|
||||
if members.destroy_all
|
||||
render json: { message: :success }, status: :ok
|
||||
else
|
||||
|
@ -68,6 +73,19 @@ module Users
|
|||
def check_manage_permissions
|
||||
render_403 unless can_manage_team?(@team)
|
||||
end
|
||||
|
||||
def log_activity(type_of, user_target)
|
||||
Activities::CreateActivityService
|
||||
.call(activity_type: type_of,
|
||||
owner: current_user,
|
||||
subject: @user_group.team,
|
||||
team: @user_group.team,
|
||||
message_items: {
|
||||
user_group: @user_group.id,
|
||||
team: @user_group.team.id,
|
||||
user_target: user_target.id
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -51,15 +51,22 @@ module Users
|
|||
@user_group.assign_attributes(user_group_params)
|
||||
|
||||
if @user_group.save
|
||||
log_activity(:create_user_group)
|
||||
@user_group.users.each do |user|
|
||||
log_activity(:add_group_user_member, { user_target: user.id })
|
||||
end
|
||||
render json: { message: t('user_groups.create.success') }, status: :created
|
||||
else
|
||||
render json: { errors: t('user_groups.create.error') }, status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
def update; end
|
||||
def update
|
||||
log_activity(:update_user_group)
|
||||
end
|
||||
|
||||
def destroy
|
||||
log_activity(:delete_user_group)
|
||||
if @user_group.destroy
|
||||
render json: { message: t('user_groups.delete.success') }, status: :ok
|
||||
else
|
||||
|
@ -96,6 +103,18 @@ module Users
|
|||
render_403 unless can_manage_team?(@team)
|
||||
end
|
||||
|
||||
def log_activity(type_of, message_items = {})
|
||||
Activities::CreateActivityService
|
||||
.call(activity_type: type_of,
|
||||
owner: current_user,
|
||||
subject: @user_group.team,
|
||||
team: @user_group.team,
|
||||
message_items: {
|
||||
user_group: @user_group.id,
|
||||
team: @user_group.team.id
|
||||
}.merge(message_items))
|
||||
end
|
||||
|
||||
def set_breadcrumbs_items
|
||||
@breadcrumbs_items = [
|
||||
{ label: t('breadcrumbs.teams'), url: teams_path },
|
||||
|
|
|
@ -53,6 +53,8 @@ module GlobalActivitiesHelper
|
|||
path = ''
|
||||
|
||||
case obj
|
||||
when UserGroup
|
||||
path = users_settings_team_user_group_path(obj.team, obj)
|
||||
when User
|
||||
return "[@#{obj.full_name}~#{obj.id.base62_encode}]"
|
||||
when Tag
|
||||
|
|
|
@ -240,7 +240,7 @@ class Extends
|
|||
ACTIVITY_MESSAGE_ITEMS_TYPES =
|
||||
ACTIVITY_SUBJECT_TYPES + %w(
|
||||
User Tag RepositoryColumn RepositoryRow Step Result Asset TinyMceAsset
|
||||
Repository MyModuleStatus RepositorySnapshot
|
||||
Repository MyModuleStatus RepositorySnapshot UserGroup
|
||||
).freeze
|
||||
|
||||
ACTIVITY_TYPES = {
|
||||
|
@ -594,31 +594,47 @@ class Extends
|
|||
change_project_start_date: 375,
|
||||
remove_project_start_date: 376,
|
||||
set_head_of_project: 377,
|
||||
remove_head_of_project: 378
|
||||
remove_head_of_project: 378,
|
||||
create_user_group: 379,
|
||||
update_user_group: 380,
|
||||
delete_user_group: 381,
|
||||
add_group_user_member: 382,
|
||||
remove_group_user_member: 383,
|
||||
form_access_granted_user_group: 384,
|
||||
form_access_changed_user_group: 385,
|
||||
form_access_revoked_user_group: 386,
|
||||
protocol_template_access_granted_user_group: 387,
|
||||
protocol_template_access_changed_user_group: 388,
|
||||
protocol_template_access_revoked_user_group: 389,
|
||||
project_access_granted_user_group: 390,
|
||||
project_access_changed_user_group: 391,
|
||||
project_access_revoked_user_group: 392,
|
||||
experiment_access_changed_user_group: 393,
|
||||
my_module_access_changed_user_group: 394
|
||||
}
|
||||
|
||||
ACTIVITY_GROUPS = {
|
||||
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, *158..162, 241, 242, 243, *370..378],
|
||||
projects: [*0..7, 32, 33, 34, 95, 108, 65, 109, *158..162, 241, 242, 243, *370..378, *390..392],
|
||||
task_results: [23, 26, 25, 42, 24, 40, 41, 99, 110, 122, 116, 128, *246..248, *257..273, *284..291, 301, 303, 306, 328],
|
||||
task: [8, 58, 9, 59, *10..14, 35, 36, 37, 53, 54, *60..63, 138, 139, 140, 64, 66, 106, 126, 120, 132,
|
||||
148, 166],
|
||||
148, 166, 394],
|
||||
task_protocol: [15, 22, 16, 18, 19, 20, 21, 17, 38, 39, 100, 111, 45, 46, 47, 121, 124, 115, 118, 127, 130, 137,
|
||||
184, 185, 188, 189, *192..203, 221, 222, 224, 225, 226, 236, *249..252, *274..278, 299, 302, 305, 327, *347..352, 359],
|
||||
task_inventory: [55, 56, 146, 147, 183],
|
||||
experiment: [*27..31, 57, 141, 165, *363..369],
|
||||
experiment: [*27..31, 57, 141, 165, *363..369, 393],
|
||||
reports: [48, 50, 49, 163, 164],
|
||||
inventories: [70, 71, 105, 144, 145, 72, 73, 74, 102, 142, 143, 75, 76, 77,
|
||||
78, 96, 107, 113, 114, *133..136, 180, 181, 182, *292..298, 308, 329],
|
||||
protocol_repository: [80, 103, 89, 87, 79, 90, 91, 88, 85, 86, 84, 81, 82,
|
||||
83, 101, 112, 123, 125, 117, 119, 129, 131, 187, 186,
|
||||
190, 191, *204..215, 220, 223, 227, 228, 229, *230..235,
|
||||
*237..240, *253..256, *279..283, 300, 304, 307, 330, *353..355, 360],
|
||||
team: [92, 94, 93, 97, 104, 244, 245],
|
||||
*237..240, *253..256, *279..283, 300, 304, 307, 330, *353..355, 360, *387..389],
|
||||
team: [92, 94, 93, 97, 104, 244, 245, *379..383],
|
||||
label_templates: [*216..219],
|
||||
storage_locations: [*309..315, 361],
|
||||
container_storage_locations: [*316..322, 326, 362],
|
||||
storage_location_repository_rows: [*323..325],
|
||||
forms: [331, 332, 333, 334, 335, 336, *337..346, 356, 357, 358]
|
||||
forms: [331, 332, 333, 334, 335, 336, *337..346, 356, 357, 358, *384..386]
|
||||
}
|
||||
|
||||
TOP_LEVEL_ASSIGNABLES = %w(Project Team Protocol Repository Form).freeze
|
||||
|
|
|
@ -392,6 +392,22 @@ en:
|
|||
remove_head_of_project_html: "%{user} removed user %{user_target} as head of project %{project}."
|
||||
task_steps_loaded_from_template_html: "%{user} added %{count} steps from template %{protocol} to task %{my_module}."
|
||||
protocol_steps_loaded_from_template_html: "%{user} added %{count} steps from template %{protocol}."
|
||||
create_user_group_html: "%{user} created group %{user_group} in workspace %{team}."
|
||||
update_user_group_html: "%{user} updated group %{user_group} in workspace %{team}."
|
||||
delete_user_group_html: "%{user} deleted group %{user_group} in workspace %{team}."
|
||||
add_group_user_member_html: "%{user} added %{user_target} to group %{user_group} in workspace %{team}."
|
||||
remove_group_user_member_html: "%{user} removed %{user_target} from group %{user_group} in workspace %{team}."
|
||||
form_access_granted_user_group_html: "%{user} granted access to %{user_group} with user role %{role} to form template %{form}."
|
||||
form_access_changed_user_group_html: "%{user} changed %{user_group}'s role on form template %{form} to %{role}."
|
||||
form_access_revoked_user_group_html: "%{user} removed group %{user_group} with user role %{role} from form template %{form}."
|
||||
protocol_template_access_granted_user_group_html: "%{user} granted access to %{user_group} with user role %{role} to protocol template %{protocol}."
|
||||
protocol_template_access_changed_user_group_html: "%{user} changed %{user_group}'s role on protocol template %{protocol} to %{role}."
|
||||
protocol_template_access_revoked_user_group_html: "%{user} removed group %{user_group} with user role %{role} from protocol template %{protocol}."
|
||||
project_access_granted_user_group_html: "%{user} granted access to %{user_group} with user role %{role} to project %{project}."
|
||||
project_access_changed_user_group_html: "%{user} changed %{user_group}'s role on project %{project} to %{role}."
|
||||
project_access_revoked_user_group_html: "%{user} removed group %{user_group} with user role %{role} from project %{project}."
|
||||
experiment_access_changed_user_group_html: "%{user} changed %{user_group}'s role on experiment %{experiment} to %{role}."
|
||||
my_module_access_changed_user_group_html: "%{user} changed %{user_group}'s role on task %{my_module} to %{role}."
|
||||
activity_name:
|
||||
create_project: "Project created"
|
||||
edit_project: "Project edited"
|
||||
|
@ -741,6 +757,22 @@ en:
|
|||
remove_head_of_project: "Head of project removed"
|
||||
task_steps_loaded_from_template: "Task step loaded from template"
|
||||
protocol_steps_loaded_from_template: "Step loaded from template"
|
||||
create_user_group: "Group created"
|
||||
update_user_group: "Group updated"
|
||||
delete_user_group: "Group deleted"
|
||||
add_group_user_member: "Group user added"
|
||||
remove_group_user_member: "Group user removed"
|
||||
form_access_granted_user_group: "Grant access to group"
|
||||
form_access_changed_user_group: "Change role of group"
|
||||
form_access_revoked_user_group: "Remove access to group"
|
||||
protocol_template_access_granted_user_group: "Grant access to group"
|
||||
protocol_template_access_changed_user_group: "Change role of group"
|
||||
protocol_template_access_revoked_user_group: "Remove access to group"
|
||||
project_access_granted_user_group: "Grant access to group"
|
||||
project_access_changed_user_group: "Change role of group"
|
||||
project_access_revoked_user_group: "Remove access to group"
|
||||
experiment_access_changed_user_group: "Change role of group"
|
||||
my_module_access_changed_user_group: "Change role of group"
|
||||
activity_group:
|
||||
projects: "Projects"
|
||||
task_results: "Task results"
|
||||
|
|
Loading…
Add table
Reference in a new issue