mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-25 01:16:31 +08:00
Merge pull request #4104 from okriuchykhin/ok_SCI_6823
Update user invitations with new user roles [SCI-6823]
This commit is contained in:
commit
4977756e3a
|
@ -143,11 +143,11 @@
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'invite_to_team':
|
case 'invite_to_team':
|
||||||
data.team_ids = [modal.attr('data-team-id')];
|
data.team_ids = [modal.attr('data-team-id')];
|
||||||
data.role = $(this).attr('data-team-role');
|
data.role_id = $(this).attr('data-team-role-id');
|
||||||
break;
|
break;
|
||||||
case 'invite_to_team_with_role':
|
case 'invite_to_team_with_role':
|
||||||
data.team_ids = [modal.attr('data-team-id')];
|
data.team_ids = [modal.attr('data-team-id')];
|
||||||
data.role = modal.attr('data-team-role');
|
data.role_id = modal.attr('data-team-role-id');
|
||||||
break;
|
break;
|
||||||
case 'invite':
|
case 'invite':
|
||||||
data.team_ids = [];
|
data.team_ids = [];
|
||||||
|
@ -155,13 +155,13 @@
|
||||||
case 'invite_with_team_selector':
|
case 'invite_with_team_selector':
|
||||||
if (teamSelectorCheckbox.is(':checked')) {
|
if (teamSelectorCheckbox.is(':checked')) {
|
||||||
data.team_ids = [teamSelectorDropdown.val()];
|
data.team_ids = [teamSelectorDropdown.val()];
|
||||||
data.role = $(this).attr('data-team-role');
|
data.role_id = $(this).attr('data-team-role-id');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'invite_with_team_selector_and_role':
|
case 'invite_with_team_selector_and_role':
|
||||||
if (teamSelectorCheckbox.is(':checked')) {
|
if (teamSelectorCheckbox.is(':checked')) {
|
||||||
data.team_ids = [teamSelectorDropdown.val()];
|
data.team_ids = [teamSelectorDropdown.val()];
|
||||||
data.role = modal.attr('data-team-role');
|
data.role_id = modal.attr('data-team-role-id');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -25,12 +25,6 @@ module Users
|
||||||
if user.errors.blank?
|
if user.errors.blank?
|
||||||
@team.created_by = user
|
@team.created_by = user
|
||||||
@team.save
|
@team.save
|
||||||
|
|
||||||
UserTeam.create(
|
|
||||||
user: user,
|
|
||||||
team: @team,
|
|
||||||
role: 'admin'
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -77,7 +71,7 @@ module Users
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
# Check if user already exists
|
# Check if user already exists
|
||||||
user = User.find_by_email(email)
|
user = User.find_by(email: email)
|
||||||
|
|
||||||
if user
|
if user
|
||||||
result[:status] = :user_exists
|
result[:status] = :user_exists
|
||||||
|
@ -101,24 +95,19 @@ module Users
|
||||||
end
|
end
|
||||||
|
|
||||||
if @teams.any? && user
|
if @teams.any? && user
|
||||||
|
@user_role ||= UserRole.find_by(name: UserRole.public_send('normal_user_role').name)
|
||||||
@teams.each do |team|
|
@teams.each do |team|
|
||||||
user_team = UserTeam.find_by(user_id: user.id, team_id: team.id)
|
if team.user_assignments.exists?(user: user)
|
||||||
if user_team
|
|
||||||
result[:status] = :user_exists_and_in_team
|
result[:status] = :user_exists_and_in_team
|
||||||
else
|
else
|
||||||
# Also generate user team relation
|
# Also generate user team relation
|
||||||
user_team = UserTeam.new(
|
team.user_assignments.create(user: user, user_role: @user_role, assigned_by: current_user)
|
||||||
user: user,
|
|
||||||
team: team,
|
|
||||||
role: @role || 'normal_user'
|
|
||||||
)
|
|
||||||
user_team.save
|
|
||||||
|
|
||||||
generate_notification(
|
generate_notification(
|
||||||
@user,
|
@user,
|
||||||
user,
|
user,
|
||||||
user_team.team,
|
team,
|
||||||
user_team.role_str
|
@user_role.name
|
||||||
)
|
)
|
||||||
|
|
||||||
Activities::CreateActivityService
|
Activities::CreateActivityService
|
||||||
|
@ -129,7 +118,7 @@ module Users
|
||||||
message_items: {
|
message_items: {
|
||||||
team: team.id,
|
team: team.id,
|
||||||
user_invited: user.id,
|
user_invited: user.id,
|
||||||
role: user_team.role_str
|
role: @user_role.name
|
||||||
})
|
})
|
||||||
|
|
||||||
result[:status] = if result[:status] == :user_exists && !user.confirmed?
|
result[:status] = if result[:status] == :user_exists && !user.confirmed?
|
||||||
|
@ -141,8 +130,8 @@ module Users
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
result[:user_team] = user_team
|
result[:user_role_name] = @user_role.name
|
||||||
result[:team] = team
|
result[:team_name] = team.name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -163,8 +152,9 @@ module Users
|
||||||
def invitable_teams
|
def invitable_teams
|
||||||
teams = current_user.teams
|
teams = current_user.teams
|
||||||
.select(:id, :name)
|
.select(:id, :name)
|
||||||
.joins(:user_teams)
|
.joins(user_assignments: :user_role)
|
||||||
.where('user_teams.role': UserTeam.roles[:admin])
|
.where(user_assignments: { user: current_user })
|
||||||
|
.where('? = ANY(user_roles.permissions)', TeamPermissions::USERS_MANAGE)
|
||||||
.distinct
|
.distinct
|
||||||
|
|
||||||
teams = teams.where_attributes_like(:name, params[:query]) if params[:query].present?
|
teams = teams.where_attributes_like(:name, params[:query]) if params[:query].present?
|
||||||
|
@ -207,10 +197,9 @@ module Users
|
||||||
@teams = Team.where(id: params[:team_ids]).select { |team| can_manage_team_users?(team) }
|
@teams = Team.where(id: params[:team_ids]).select { |team| can_manage_team_users?(team) }
|
||||||
return render_403 if params[:team_ids].present? && @teams.blank?
|
return render_403 if params[:team_ids].present? && @teams.blank?
|
||||||
|
|
||||||
@role = params['role']
|
@user_role = UserRole.find_by(id: params[:role_id])
|
||||||
|
|
||||||
return render_403 if @emails.blank? # We must have at least one email
|
return render_403 if @emails.blank? # We must have at least one email
|
||||||
return render_403 if @role && !UserTeam.roles.key?(@role) # if we select role, we must check that this role exist
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,4 +6,14 @@ module UserRolesHelper
|
||||||
@user_roles_collection ||= UserRole.order(id: :asc).pluck(:name, :id)
|
@user_roles_collection ||= UserRole.order(id: :asc).pluck(:name, :id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def team_user_roles_collection
|
||||||
|
team_permissions =
|
||||||
|
PermissionExtends::TeamPermissions.constants.map { |const| TeamPermissions.const_get(const) } +
|
||||||
|
ProtocolPermissions.constants.map { |const| ProtocolPermissions.const_get(const) } +
|
||||||
|
RepositoryPermissions.constants.map { |const| RepositoryPermissions.const_get(const) }
|
||||||
|
UserRole.where('permissions && ARRAY[?]::varchar[]', team_permissions)
|
||||||
|
.sort_by { |user_role| (user_role.permissions & team_permissions).length }
|
||||||
|
.reverse!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -157,15 +157,13 @@ invite_with_team_selector = type.in?(%w(invite_new_members invite_with_team_sele
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li>
|
<% team_user_roles_collection.each do |user_role| %>
|
||||||
<%= link_to t('invite_users.invite_guest'), '#', data: { action: 'invite', 'team-role' => 'guest', remote: true } %>
|
<li>
|
||||||
</li>
|
<%= link_to '#', data: { action: 'invite', 'team-role-id' => user_role.id, remote: true } do %>
|
||||||
<li>
|
<%= t('invite_users.invite_as', role: user_role.name.pluralize) %>
|
||||||
<%= link_to t('invite_users.invite_user'), '#', data: { action: 'invite', 'team-role' => 'normal_user', remote: true } %>
|
<% end %>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<% end %>
|
||||||
<%= link_to t('invite_users.invite_admin'), '#', data: { action: 'invite', 'team-role' => 'admin', remote: true } %>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,24 +15,24 @@
|
||||||
<strong><%= result[:email] %></strong>
|
<strong><%= result[:email] %></strong>
|
||||||
-
|
-
|
||||||
<%= t('invite_users.results.user_exists_and_in_team',
|
<%= t('invite_users.results.user_exists_and_in_team',
|
||||||
team: result[:team].name,
|
team: result[:team_name],
|
||||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
role: result[:user_role_name]) %>
|
||||||
</div>
|
</div>
|
||||||
<% elsif result[:status] == :user_exists_unconfirmed_invited_to_team %>
|
<% elsif result[:status] == :user_exists_unconfirmed_invited_to_team %>
|
||||||
<div class="alert alert-info" role="alert">
|
<div class="alert alert-info" role="alert">
|
||||||
<strong><%= result[:email] %></strong>
|
<strong><%= result[:email] %></strong>
|
||||||
-
|
-
|
||||||
<%= t('invite_users.results.user_exists_unconfirmed_invited_to_team',
|
<%= t('invite_users.results.user_exists_unconfirmed_invited_to_team',
|
||||||
team: result[:team].name,
|
team: result[:team_name],
|
||||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
role: result[:user_role_name]) %>
|
||||||
</div>
|
</div>
|
||||||
<% elsif result[:status] == :user_exists_invited_to_team %>
|
<% elsif result[:status] == :user_exists_invited_to_team %>
|
||||||
<div class="alert alert-info" role="alert">
|
<div class="alert alert-info" role="alert">
|
||||||
<strong><%= result[:email] %></strong>
|
<strong><%= result[:email] %></strong>
|
||||||
-
|
-
|
||||||
<%= t('invite_users.results.user_exists_invited_to_team',
|
<%= t('invite_users.results.user_exists_invited_to_team',
|
||||||
team: result[:team].name,
|
team: result[:team_name],
|
||||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
role: result[:user_role_name]) %>
|
||||||
</div>
|
</div>
|
||||||
<% elsif result[:status] == :user_created %>
|
<% elsif result[:status] == :user_created %>
|
||||||
<div class="alert alert-success" role="alert">
|
<div class="alert alert-success" role="alert">
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
<strong><%= result[:email] %></strong>
|
<strong><%= result[:email] %></strong>
|
||||||
-
|
-
|
||||||
<%= t('invite_users.results.user_created_invited_to_team',
|
<%= t('invite_users.results.user_created_invited_to_team',
|
||||||
team: result[:team].name,
|
team: result[:team_name],
|
||||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
role: result[:user_role_name]) %>
|
||||||
</div>
|
</div>
|
||||||
<% elsif result[:status] == :user_invalid %>
|
<% elsif result[:status] == :user_invalid %>
|
||||||
<div class="alert alert-danger" role="alert">
|
<div class="alert alert-danger" role="alert">
|
||||||
|
|
|
@ -2580,6 +2580,7 @@ en:
|
||||||
input_subtitle: "You can enter one or more emails. To confirm each one press the ENTER key."
|
input_subtitle: "You can enter one or more emails. To confirm each one press the ENTER key."
|
||||||
invite_to_team_heading: "Invite users to my team:"
|
invite_to_team_heading: "Invite users to my team:"
|
||||||
invite_btn: "Invite members"
|
invite_btn: "Invite members"
|
||||||
|
invite_as: "As %{role}"
|
||||||
invite_guest: "As Guests"
|
invite_guest: "As Guests"
|
||||||
invite_user: "As Normal Users"
|
invite_user: "As Normal Users"
|
||||||
invite_admin: "As Administrators"
|
invite_admin: "As Administrators"
|
||||||
|
|
Loading…
Reference in a new issue