forked from External/greenlight
Bug fixes for roles (#729)
This commit is contained in:
parent
6e73bbdb5a
commit
6d6ac3efdd
|
@ -205,17 +205,7 @@ class AdminsController < ApplicationController
|
||||||
return redirect_to admin_roles_path
|
return redirect_to admin_roles_path
|
||||||
end
|
end
|
||||||
|
|
||||||
# Create the new role with the second highest priority
|
new_role = Role.create_new_role(new_role_name, @user_domain)
|
||||||
# This means that it will only be more important than the user role
|
|
||||||
# This also updates the user role to have the highest priority
|
|
||||||
new_role = Role.create(name: new_role_name, provider: @user_domain)
|
|
||||||
user_role = Role.find_by(name: 'user', provider: @user_domain)
|
|
||||||
|
|
||||||
new_role.priority = user_role.priority
|
|
||||||
user_role.priority += 1
|
|
||||||
|
|
||||||
new_role.save!
|
|
||||||
user_role.save!
|
|
||||||
|
|
||||||
redirect_to admin_roles_path(selected_role: new_role.id)
|
redirect_to admin_roles_path(selected_role: new_role.id)
|
||||||
end
|
end
|
||||||
|
@ -283,6 +273,9 @@ class AdminsController < ApplicationController
|
||||||
:colour
|
:colour
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Role is a default role so users can't change the name
|
||||||
|
role_params[:name] = role.name if Role::RESERVED_ROLE_NAMES.include?(role.name)
|
||||||
|
|
||||||
# Make sure if the user is updating the role name that the role name is valid
|
# Make sure if the user is updating the role name that the role name is valid
|
||||||
if role.name != role_params[:name] && !Role.duplicate_name(role_params[:name], @user_domain) &&
|
if role.name != role_params[:name] && !Role.duplicate_name(role_params[:name], @user_domain) &&
|
||||||
!role_params[:name].strip.empty?
|
!role_params[:name].strip.empty?
|
||||||
|
|
|
@ -42,7 +42,7 @@ class UserMailer < ApplicationMailer
|
||||||
@admin_url = url + "admins"
|
@admin_url = url + "admins"
|
||||||
@image = image
|
@image = image
|
||||||
@color = color
|
@color = color
|
||||||
@role = role.name
|
@role = translated_role_name(role)
|
||||||
mail to: user.email, subject: t('mailer.user.promoted.subtitle', role: translated_role_name(role))
|
mail to: user.email, subject: t('mailer.user.promoted.subtitle', role: translated_role_name(role))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ class UserMailer < ApplicationMailer
|
||||||
@root_url = url
|
@root_url = url
|
||||||
@image = image
|
@image = image
|
||||||
@color = color
|
@color = color
|
||||||
@role = role.name
|
@role = translated_role_name(role)
|
||||||
mail to: user.email, subject: t('mailer.user.demoted.subtitle', role: translated_role_name(role))
|
mail to: user.email, subject: t('mailer.user.demoted.subtitle', role: translated_role_name(role))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -40,4 +40,20 @@ class Role < ApplicationRecord
|
||||||
send_promoted_email: true, send_demoted_email: true, can_edit_site_settings: true,
|
send_promoted_email: true, send_demoted_email: true, can_edit_site_settings: true,
|
||||||
can_edit_roles: true, can_manage_users: true, colour: "#cd201f")
|
can_edit_roles: true, can_manage_users: true, colour: "#cd201f")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.create_new_role(role_name, provider)
|
||||||
|
# Create the new role with the second highest priority
|
||||||
|
# This means that it will only be more important than the user role
|
||||||
|
# This also updates the user role to have the highest priority
|
||||||
|
role = Role.create(name: role_name, provider: provider)
|
||||||
|
user_role = Role.find_by(name: 'user', provider: provider)
|
||||||
|
|
||||||
|
role.priority = user_role.priority
|
||||||
|
user_role.priority += 1
|
||||||
|
|
||||||
|
role.save!
|
||||||
|
user_role.save!
|
||||||
|
|
||||||
|
role
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -248,7 +248,15 @@ class User < ApplicationRecord
|
||||||
unless has_role?(role)
|
unless has_role?(role)
|
||||||
role_provider = Rails.configuration.loadbalanced_configuration ? provider : "greenlight"
|
role_provider = Rails.configuration.loadbalanced_configuration ? provider : "greenlight"
|
||||||
|
|
||||||
roles << Role.find_or_create_by(name: role, provider: role_provider)
|
new_role = Role.find_by(name: role, provider: role_provider)
|
||||||
|
|
||||||
|
if new_role.nil?
|
||||||
|
return if Role.duplicate_name(role, role_provider) || role.strip.empty?
|
||||||
|
|
||||||
|
new_role = Role.create_new_role(role, role_provider)
|
||||||
|
end
|
||||||
|
|
||||||
|
roles << new_role
|
||||||
|
|
||||||
save!
|
save!
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,12 +15,13 @@
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<% current_role = current_user.highest_priority_role%>
|
||||||
<div class="col-lg-3 mb-4">
|
<div class="col-lg-3 mb-4">
|
||||||
<div class="list-group list-group-transparent mb-0">
|
<div class="list-group list-group-transparent mb-0">
|
||||||
<div id="rolesSelect" data-url="<%= admin_roles_order_path %>">
|
<div id="rolesSelect" data-url="<%= admin_roles_order_path %>">
|
||||||
<% @roles.each do |role| %>
|
<% @roles.each do |role| %>
|
||||||
<%= link_to admin_roles_path(selected_role: role.id),
|
<%= link_to admin_roles_path(selected_role: role.id),
|
||||||
class: "#{"sort-disabled" if role.name == "user" || role.name == "admin" || role.priority <= current_user.highest_priority_role.priority } dropdown-item list-group-item list-group-item-action #{"active" if @selected_role.id == role.id}",
|
class: "#{"sort-disabled" if role.name == "user" || role.name == "admin" || role.priority <= current_role.priority } dropdown-item list-group-item list-group-item-action #{"active" if @selected_role.id == role.id}",
|
||||||
id: dom_id(role) do %>
|
id: dom_id(role) do %>
|
||||||
<%= translated_role_name(role) %>
|
<%= translated_role_name(role) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -47,34 +48,34 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.can_create_rooms %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.can_create_rooms")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.can_create_rooms")%></span>
|
||||||
<%= f.check_box :can_create_rooms, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :can_create_rooms, class: "custom-switch-input", disabled: edit_disabled || !current_role.can_create_rooms %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.send_promoted_email %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.promote_email")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.promote_email")%></span>
|
||||||
<%= f.check_box :send_promoted_email, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :send_promoted_email, class: "custom-switch-input", disabled: edit_disabled || !current_role.send_promoted_email %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.send_demoted_email %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.demote_email")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.demote_email")%></span>
|
||||||
<%= f.check_box :send_demoted_email, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :send_demoted_email, class: "custom-switch-input", disabled: edit_disabled || !current_role.send_demoted_email %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.can_edit_site_settings %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.edit_site_settings")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.edit_site_settings")%></span>
|
||||||
<%= f.check_box :can_edit_site_settings, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :can_edit_site_settings, class: "custom-switch-input", disabled: edit_disabled || !current_role.can_edit_site_settings %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.can_edit_roles %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.edit_roles")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.edit_roles")%></span>
|
||||||
<%= f.check_box :can_edit_roles, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :can_edit_roles, class: "custom-switch-input", disabled: edit_disabled || !current_role.can_edit_roles %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block">
|
<label class="custom-switch pl-0 mt-3 mb-3 w-100 text-left d-inline-block <%="form-disable" if !current_role.can_manage_users %>">
|
||||||
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.manage_users")%></span>
|
<span class="ml-0 custom-switch-description"><%= t("administrator.roles.manage_users")%></span>
|
||||||
<%= f.check_box :can_manage_users, class: "custom-switch-input", disabled: edit_disabled %>
|
<%= f.check_box :can_manage_users, class: "custom-switch-input", disabled: edit_disabled || !current_role.can_manage_users %>
|
||||||
<span class="custom-switch-indicator float-right"></span>
|
<span class="custom-switch-indicator float-right"></span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<% if @user.image.blank? %>
|
<% if @user.image.blank? %>
|
||||||
<span class="avatar avatar-xxl mr-5 mt-2"><%= @user.name.first %></span>
|
<span class="avatar avatar-xxl mr-5 mt-2 bg-primary"><%= @user.name.first %></span>
|
||||||
<% else %>
|
<% else %>
|
||||||
<span class="avatar avatar-xxl mr-5 mt-2" style="background-image: url(<%= @user.image %>)"></span>
|
<span class="avatar avatar-xxl mr-5 mt-2" style="background-image: url(<%= @user.image %>)"></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
Loading…
Reference in New Issue