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) {
|
||||
case 'invite_to_team':
|
||||
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;
|
||||
case 'invite_to_team_with_role':
|
||||
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;
|
||||
case 'invite':
|
||||
data.team_ids = [];
|
||||
|
@ -155,13 +155,13 @@
|
|||
case 'invite_with_team_selector':
|
||||
if (teamSelectorCheckbox.is(':checked')) {
|
||||
data.team_ids = [teamSelectorDropdown.val()];
|
||||
data.role = $(this).attr('data-team-role');
|
||||
data.role_id = $(this).attr('data-team-role-id');
|
||||
}
|
||||
break;
|
||||
case 'invite_with_team_selector_and_role':
|
||||
if (teamSelectorCheckbox.is(':checked')) {
|
||||
data.team_ids = [teamSelectorDropdown.val()];
|
||||
data.role = modal.attr('data-team-role');
|
||||
data.role_id = modal.attr('data-team-role-id');
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -25,12 +25,6 @@ module Users
|
|||
if user.errors.blank?
|
||||
@team.created_by = user
|
||||
@team.save
|
||||
|
||||
UserTeam.create(
|
||||
user: user,
|
||||
team: @team,
|
||||
role: 'admin'
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -77,7 +71,7 @@ module Users
|
|||
next
|
||||
end
|
||||
# Check if user already exists
|
||||
user = User.find_by_email(email)
|
||||
user = User.find_by(email: email)
|
||||
|
||||
if user
|
||||
result[:status] = :user_exists
|
||||
|
@ -101,24 +95,19 @@ module Users
|
|||
end
|
||||
|
||||
if @teams.any? && user
|
||||
@user_role ||= UserRole.find_by(name: UserRole.public_send('normal_user_role').name)
|
||||
@teams.each do |team|
|
||||
user_team = UserTeam.find_by(user_id: user.id, team_id: team.id)
|
||||
if user_team
|
||||
if team.user_assignments.exists?(user: user)
|
||||
result[:status] = :user_exists_and_in_team
|
||||
else
|
||||
# Also generate user team relation
|
||||
user_team = UserTeam.new(
|
||||
user: user,
|
||||
team: team,
|
||||
role: @role || 'normal_user'
|
||||
)
|
||||
user_team.save
|
||||
team.user_assignments.create(user: user, user_role: @user_role, assigned_by: current_user)
|
||||
|
||||
generate_notification(
|
||||
@user,
|
||||
user,
|
||||
user_team.team,
|
||||
user_team.role_str
|
||||
team,
|
||||
@user_role.name
|
||||
)
|
||||
|
||||
Activities::CreateActivityService
|
||||
|
@ -129,7 +118,7 @@ module Users
|
|||
message_items: {
|
||||
team: team.id,
|
||||
user_invited: user.id,
|
||||
role: user_team.role_str
|
||||
role: @user_role.name
|
||||
})
|
||||
|
||||
result[:status] = if result[:status] == :user_exists && !user.confirmed?
|
||||
|
@ -141,8 +130,8 @@ module Users
|
|||
end
|
||||
end
|
||||
|
||||
result[:user_team] = user_team
|
||||
result[:team] = team
|
||||
result[:user_role_name] = @user_role.name
|
||||
result[:team_name] = team.name
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -163,8 +152,9 @@ module Users
|
|||
def invitable_teams
|
||||
teams = current_user.teams
|
||||
.select(:id, :name)
|
||||
.joins(:user_teams)
|
||||
.where('user_teams.role': UserTeam.roles[:admin])
|
||||
.joins(user_assignments: :user_role)
|
||||
.where(user_assignments: { user: current_user })
|
||||
.where('? = ANY(user_roles.permissions)', TeamPermissions::USERS_MANAGE)
|
||||
.distinct
|
||||
|
||||
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) }
|
||||
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 @role && !UserTeam.roles.key?(@role) # if we select role, we must check that this role exist
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,4 +6,14 @@ module UserRolesHelper
|
|||
@user_roles_collection ||= UserRole.order(id: :asc).pluck(:name, :id)
|
||||
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
|
||||
|
|
|
@ -157,15 +157,13 @@ invite_with_team_selector = type.in?(%w(invite_new_members invite_with_team_sele
|
|||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<%= link_to t('invite_users.invite_guest'), '#', data: { action: 'invite', 'team-role' => 'guest', remote: true } %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to t('invite_users.invite_user'), '#', data: { action: 'invite', 'team-role' => 'normal_user', remote: true } %>
|
||||
</li>
|
||||
<li>
|
||||
<%= link_to t('invite_users.invite_admin'), '#', data: { action: 'invite', 'team-role' => 'admin', remote: true } %>
|
||||
</li>
|
||||
<% team_user_roles_collection.each do |user_role| %>
|
||||
<li>
|
||||
<%= link_to '#', data: { action: 'invite', 'team-role-id' => user_role.id, remote: true } do %>
|
||||
<%= t('invite_users.invite_as', role: user_role.name.pluralize) %>
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,24 +15,24 @@
|
|||
<strong><%= result[:email] %></strong>
|
||||
-
|
||||
<%= t('invite_users.results.user_exists_and_in_team',
|
||||
team: result[:team].name,
|
||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
||||
team: result[:team_name],
|
||||
role: result[:user_role_name]) %>
|
||||
</div>
|
||||
<% elsif result[:status] == :user_exists_unconfirmed_invited_to_team %>
|
||||
<div class="alert alert-info" role="alert">
|
||||
<strong><%= result[:email] %></strong>
|
||||
-
|
||||
<%= t('invite_users.results.user_exists_unconfirmed_invited_to_team',
|
||||
team: result[:team].name,
|
||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
||||
team: result[:team_name],
|
||||
role: result[:user_role_name]) %>
|
||||
</div>
|
||||
<% elsif result[:status] == :user_exists_invited_to_team %>
|
||||
<div class="alert alert-info" role="alert">
|
||||
<strong><%= result[:email] %></strong>
|
||||
-
|
||||
<%= t('invite_users.results.user_exists_invited_to_team',
|
||||
team: result[:team].name,
|
||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
||||
team: result[:team_name],
|
||||
role: result[:user_role_name]) %>
|
||||
</div>
|
||||
<% elsif result[:status] == :user_created %>
|
||||
<div class="alert alert-success" role="alert">
|
||||
|
@ -45,8 +45,8 @@
|
|||
<strong><%= result[:email] %></strong>
|
||||
-
|
||||
<%= t('invite_users.results.user_created_invited_to_team',
|
||||
team: result[:team].name,
|
||||
role: t("user_teams.enums.role.#{result[:user_team].role}")) %>
|
||||
team: result[:team_name],
|
||||
role: result[:user_role_name]) %>
|
||||
</div>
|
||||
<% elsif result[:status] == :user_invalid %>
|
||||
<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."
|
||||
invite_to_team_heading: "Invite users to my team:"
|
||||
invite_btn: "Invite members"
|
||||
invite_as: "As %{role}"
|
||||
invite_guest: "As Guests"
|
||||
invite_user: "As Normal Users"
|
||||
invite_admin: "As Administrators"
|
||||
|
|
Loading…
Reference in a new issue