forked from External/greenlight
GRN2-180: First stages of refactoring code for v2.4 (#748)
* Email rescues and authenticator concern * Application controller and helper clean up * Moved controller code out of helpers * More helper and email clean up * Cleaned up remaining helpers and create omniauth_options * Controller code clean up * restructured views structure * Restructured role code * Restructured profile and code clean up * Master merge * Added bbb server concern to deal with bbb calls * Bug fixes and changes after changes * rspec * More rubocop fixes
This commit is contained in:
88
app/controllers/concerns/authenticator.rb
Normal file
88
app/controllers/concerns/authenticator.rb
Normal file
@ -0,0 +1,88 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
#
|
||||
# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU Lesser General Public License as published by the Free Software
|
||||
# Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License along
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
module Authenticator
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
# Logs a user into GreenLight.
|
||||
def login(user)
|
||||
migrate_twitter_user(user)
|
||||
|
||||
session[:user_id] = user.id
|
||||
|
||||
# If there are not terms, or the user has accepted them, check for email verification
|
||||
if !Rails.configuration.terms || user.accepted_terms
|
||||
check_email_verified(user)
|
||||
else
|
||||
redirect_to terms_path
|
||||
end
|
||||
end
|
||||
|
||||
# If email verification is disabled, or the user has verified, go to their room
|
||||
def check_email_verified(user)
|
||||
# Admin users should be redirected to the admin page
|
||||
if user.has_role? :super_admin
|
||||
redirect_to admins_path
|
||||
elsif user.activated?
|
||||
# Dont redirect to any of these urls
|
||||
dont_redirect_to = [root_url, signin_url, signup_url, unauthorized_url, internal_error_url, not_found_url]
|
||||
url = if cookies[:return_to] && !dont_redirect_to.include?(cookies[:return_to])
|
||||
cookies[:return_to]
|
||||
else
|
||||
user.main_room
|
||||
end
|
||||
|
||||
# Delete the cookie if it exists
|
||||
cookies.delete :return_to if cookies[:return_to]
|
||||
|
||||
redirect_to url
|
||||
else
|
||||
redirect_to resend_path
|
||||
end
|
||||
end
|
||||
|
||||
# Logs current user out of GreenLight.
|
||||
def logout
|
||||
session.delete(:user_id) if current_user
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Migrates all of the twitter users rooms to the new account
|
||||
def migrate_twitter_user(user)
|
||||
if !session["old_twitter_user_id"].nil? && user.provider != "twitter"
|
||||
old_user = User.find(session["old_twitter_user_id"])
|
||||
|
||||
old_user.rooms.each do |room|
|
||||
room.owner = user
|
||||
|
||||
room.name = "Old " + room.name if room.id == old_user.main_room.id
|
||||
|
||||
room.save!
|
||||
end
|
||||
|
||||
# Query for the old user again so the migrated rooms don't get deleted
|
||||
old_user.reload
|
||||
old_user.destroy!
|
||||
|
||||
session["old_twitter_user_id"] = nil
|
||||
|
||||
flash[:success] = I18n.t("registration.deprecated.merge_success")
|
||||
end
|
||||
end
|
||||
end
|
109
app/controllers/concerns/bbb_server.rb
Normal file
109
app/controllers/concerns/bbb_server.rb
Normal file
@ -0,0 +1,109 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
#
|
||||
# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU Lesser General Public License as published by the Free Software
|
||||
# Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License along
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
require 'bigbluebutton_api'
|
||||
|
||||
module BbbServer
|
||||
extend ActiveSupport::Concern
|
||||
include BbbApi
|
||||
|
||||
META_LISTED = "gl-listed"
|
||||
|
||||
# Checks if a room is running on the BigBlueButton server.
|
||||
def room_running?(bbb_id)
|
||||
bbb_server.is_meeting_running?(bbb_id)
|
||||
end
|
||||
|
||||
def get_recordings(meeting_id)
|
||||
bbb_server.get_recordings(meetingID: meeting_id)
|
||||
end
|
||||
|
||||
def get_multiple_recordings(meeting_ids)
|
||||
bbb_server.get_recordings(meetingID: meeting_ids)
|
||||
end
|
||||
|
||||
# Returns a URL to join a user into a meeting.
|
||||
def join_path(room, name, options = {}, uid = nil)
|
||||
# Create the meeting, even if it's running
|
||||
start_session(room, options)
|
||||
|
||||
# Determine the password to use when joining.
|
||||
password = options[:user_is_moderator] ? room.moderator_pw : room.attendee_pw
|
||||
|
||||
# Generate the join URL.
|
||||
join_opts = {}
|
||||
join_opts[:userID] = uid if uid
|
||||
join_opts[:join_via_html5] = true
|
||||
join_opts[:guest] = true if options[:require_moderator_approval] && !options[:user_is_moderator]
|
||||
|
||||
bbb_server.join_meeting_url(room.bbb_id, name, password, join_opts)
|
||||
end
|
||||
|
||||
# Creates a meeting on the BigBlueButton server.
|
||||
def start_session(room, options = {})
|
||||
create_options = {
|
||||
record: options[:meeting_recorded].to_s,
|
||||
logoutURL: options[:meeting_logout_url] || '',
|
||||
moderatorPW: room.moderator_pw,
|
||||
attendeePW: room.attendee_pw,
|
||||
moderatorOnlyMessage: options[:moderator_message],
|
||||
muteOnStart: options[:mute_on_start] || false,
|
||||
"meta_#{META_LISTED}": options[:recording_default_visibility] || false,
|
||||
"meta_bbb-origin-version": Greenlight::Application::VERSION,
|
||||
"meta_bbb-origin": "Greenlight",
|
||||
"meta_bbb-origin-server-name": options[:host]
|
||||
}
|
||||
|
||||
create_options[:guestPolicy] = "ASK_MODERATOR" if options[:require_moderator_approval]
|
||||
|
||||
# Send the create request.
|
||||
begin
|
||||
meeting = bbb_server.create_meeting(room.name, room.bbb_id, create_options)
|
||||
# Update session info.
|
||||
unless meeting[:messageKey] == 'duplicateWarning'
|
||||
room.update_attributes(sessions: room.sessions + 1,
|
||||
last_session: DateTime.now)
|
||||
end
|
||||
rescue BigBlueButton::BigBlueButtonException => e
|
||||
puts "BigBlueButton failed on create: #{e.key}: #{e.message}"
|
||||
raise e
|
||||
end
|
||||
end
|
||||
|
||||
# Gets the number of recordings for this room
|
||||
def recording_count(bbb_id)
|
||||
bbb_server.get_recordings(meetingID: bbb_id)[:recordings].length
|
||||
end
|
||||
|
||||
# Update a recording from a room
|
||||
def update_recording(record_id, meta)
|
||||
meta[:recordID] = record_id
|
||||
bbb_server.send_api_request("updateRecordings", meta)
|
||||
end
|
||||
|
||||
# Deletes a recording from a room.
|
||||
def delete_recording(record_id)
|
||||
bbb_server.delete_recordings(record_id)
|
||||
end
|
||||
|
||||
# Deletes all recordings associated with the room.
|
||||
def delete_all_recordings(bbb_id)
|
||||
record_ids = bbb_server.get_recordings(meetingID: bbb_id)[:recordings].pluck(:recordID)
|
||||
bbb_server.delete_recordings(record_ids) unless record_ids.empty?
|
||||
end
|
||||
end
|
@ -21,69 +21,110 @@ module Emailer
|
||||
|
||||
# Sends account activation email.
|
||||
def send_activation_email(user)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
@user = user
|
||||
UserMailer.verify_email(@user, user_verification_link, logo_image, user_color).deliver
|
||||
UserMailer.verify_email(user, user_verification_link(user), @settings).deliver
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
else
|
||||
flash[:success] = I18n.t("email_sent", email_type: t("verify.verification"))
|
||||
end
|
||||
end
|
||||
|
||||
# Sends password reset email.
|
||||
def send_password_reset_email(user)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
@user = user
|
||||
UserMailer.password_reset(@user, reset_link, logo_image, user_color).deliver_now
|
||||
UserMailer.password_reset(user, reset_link(user), @settings).deliver_now
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
else
|
||||
flash[:success] = I18n.t("email_sent", email_type: t("reset_password.subtitle"))
|
||||
end
|
||||
end
|
||||
|
||||
def send_user_promoted_email(user, role)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
UserMailer.user_promoted(user, role, root_url, logo_image, user_color).deliver_now
|
||||
UserMailer.user_promoted(user, role, root_url, @settings).deliver_now
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
end
|
||||
end
|
||||
|
||||
def send_user_demoted_email(user, role)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
UserMailer.user_demoted(user, role, root_url, logo_image, user_color).deliver_now
|
||||
UserMailer.user_demoted(user, role, root_url, @settings).deliver_now
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
end
|
||||
end
|
||||
|
||||
# Sends inivitation to join
|
||||
def send_invitation_email(name, email, token)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
@token = token
|
||||
UserMailer.invite_email(name, email, invitation_link, logo_image, user_color).deliver_now
|
||||
UserMailer.invite_email(name, email, invitation_link(token), @settings).deliver_now
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
else
|
||||
flash[:success] = I18n.t("administrator.flash.invite", email: email)
|
||||
end
|
||||
end
|
||||
|
||||
def send_user_approved_email(user)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
UserMailer.approve_user(user, root_url, logo_image, user_color).deliver_now
|
||||
UserMailer.approve_user(user, root_url, @settings).deliver_now
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
else
|
||||
flash[:success] = I18n.t("email_sent", email_type: t("verify.verification"))
|
||||
end
|
||||
end
|
||||
|
||||
def send_approval_user_signup_email(user)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
admin_emails = admin_emails()
|
||||
unless admin_emails.empty?
|
||||
UserMailer.approval_user_signup(user, admins_url, logo_image, user_color, admin_emails).deliver_now
|
||||
admin_emails = admin_emails()
|
||||
UserMailer.approval_user_signup(user, admins_url, admin_emails, @settings).deliver_now unless admin_emails.empty?
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
end
|
||||
end
|
||||
|
||||
def send_invite_user_signup_email(user)
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
begin
|
||||
return unless Rails.configuration.enable_email_verification
|
||||
|
||||
admin_emails = admin_emails()
|
||||
unless admin_emails.empty?
|
||||
UserMailer.invite_user_signup(user, admins_url, logo_image, user_color, admin_emails).deliver_now
|
||||
admin_emails = admin_emails()
|
||||
UserMailer.invite_user_signup(user, admins_url, admin_emails, @settings).deliver_now unless admin_emails.empty?
|
||||
rescue => e
|
||||
logger.error "Support: Error in email delivery: #{e}"
|
||||
flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error"))
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Returns the link the user needs to click to verify their account
|
||||
def user_verification_link
|
||||
edit_account_activation_url(token: @user.activation_token, email: @user.email)
|
||||
def user_verification_link(user)
|
||||
edit_account_activation_url(token: user.activation_token, email: user.email)
|
||||
end
|
||||
|
||||
def admin_emails
|
||||
@ -91,21 +132,21 @@ module Emailer
|
||||
|
||||
if Rails.configuration.loadbalanced_configuration
|
||||
admins = admins.without_role(:super_admin)
|
||||
.where(provider: user_settings_provider)
|
||||
.where(provider: @user_domain)
|
||||
end
|
||||
|
||||
admins.collect(&:email).join(",")
|
||||
end
|
||||
|
||||
def reset_link
|
||||
edit_password_reset_url(@user.reset_token, email: @user.email)
|
||||
def reset_link(user)
|
||||
edit_password_reset_url(user.reset_token, email: user.email)
|
||||
end
|
||||
|
||||
def invitation_link
|
||||
if allow_greenlight_users?
|
||||
signup_url(invite_token: @token)
|
||||
def invitation_link(token)
|
||||
if allow_greenlight_accounts?
|
||||
signup_url(invite_token: token)
|
||||
else
|
||||
root_url(invite_token: @token)
|
||||
root_url(invite_token: token)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -18,29 +18,29 @@
|
||||
|
||||
module Recorder
|
||||
extend ActiveSupport::Concern
|
||||
include ::BbbApi
|
||||
include RecordingsHelper
|
||||
|
||||
# Fetches all recordings for a room.
|
||||
def recordings(room_bbb_id, provider, search_params = {}, ret_search_params = false)
|
||||
res = bbb(provider).get_recordings(meetingID: room_bbb_id)
|
||||
def recordings(room_bbb_id, search_params = {}, ret_search_params = false)
|
||||
res = get_recordings(room_bbb_id)
|
||||
|
||||
format_recordings(res, search_params, ret_search_params)
|
||||
end
|
||||
|
||||
# Fetches a rooms public recordings.
|
||||
def public_recordings(room_bbb_id, provider, search_params = {}, ret_search_params = false)
|
||||
search, order_col, order_dir, recs = recordings(room_bbb_id, provider, search_params, ret_search_params)
|
||||
def public_recordings(room_bbb_id, search_params = {}, ret_search_params = false)
|
||||
search, order_col, order_dir, recs = recordings(room_bbb_id, search_params, ret_search_params)
|
||||
[search, order_col, order_dir, recs.select { |r| r[:metadata][:"gl-listed"] == "true" }]
|
||||
end
|
||||
|
||||
# Makes paginated API calls to get recordings
|
||||
def all_recordings(room_bbb_ids, provider, search_params = {}, ret_search_params = false, search_name = false)
|
||||
def all_recordings(room_bbb_ids, search_params = {}, ret_search_params = false, search_name = false)
|
||||
res = { recordings: [] }
|
||||
|
||||
until room_bbb_ids.empty?
|
||||
# bbb.get_recordings returns an object
|
||||
# take only the array portion of the object that is returned
|
||||
full_res = bbb(provider).get_recordings(meetingID: room_bbb_ids.pop(Rails.configuration.pagination_number))
|
||||
full_res = get_multiple_recordings(room_bbb_ids.pop(Rails.configuration.pagination_number))
|
||||
res[:recordings].push(*full_res[:recordings])
|
||||
end
|
||||
|
||||
|
@ -19,20 +19,12 @@
|
||||
module Registrar
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def registration_method
|
||||
Setting.find_or_create_by!(provider: user_settings_provider).get_value("Registration Method")
|
||||
end
|
||||
|
||||
def open_registration
|
||||
registration_method == Rails.configuration.registration_methods[:open]
|
||||
end
|
||||
|
||||
def approval_registration
|
||||
registration_method == Rails.configuration.registration_methods[:approval]
|
||||
@settings.get_value("Registration Method") == Rails.configuration.registration_methods[:approval]
|
||||
end
|
||||
|
||||
def invite_registration
|
||||
registration_method == Rails.configuration.registration_methods[:invite]
|
||||
@settings.get_value("Registration Method") == Rails.configuration.registration_methods[:invite]
|
||||
end
|
||||
|
||||
# Returns a hash containing whether the user has been invited and if they
|
||||
|
161
app/controllers/concerns/rolify.rb
Normal file
161
app/controllers/concerns/rolify.rb
Normal file
@ -0,0 +1,161 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
|
||||
#
|
||||
# Copyright (c) 2018 BigBlueButton Inc. and by respective authors (see below).
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it under the
|
||||
# terms of the GNU Lesser General Public License as published by the Free Software
|
||||
# Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License along
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
module Rolify
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
# Gets all roles
|
||||
def all_roles(selected_role)
|
||||
@roles = Role.editable_roles(@user_domain)
|
||||
|
||||
if @roles.count.zero?
|
||||
Role.create_default_roles(@user_domain)
|
||||
@roles = Role.editable_roles(@user_domain)
|
||||
end
|
||||
|
||||
@selected_role = if selected_role.nil?
|
||||
@roles.find_by(name: 'user')
|
||||
else
|
||||
@roles.find(selected_role)
|
||||
end
|
||||
|
||||
@roles
|
||||
end
|
||||
|
||||
# Creates a new role
|
||||
def create_role(new_role_name)
|
||||
# Make sure that the role name isn't a duplicate or a reserved name like super_admin or empty
|
||||
return nil if Role.duplicate_name(new_role_name, @user_domain) || new_role_name.strip.empty?
|
||||
|
||||
Role.create_new_role(new_role_name, @user_domain)
|
||||
end
|
||||
|
||||
# Updates a user's roles
|
||||
def update_roles(roles)
|
||||
# Check that the user can manage users
|
||||
return true unless current_user.highest_priority_role.can_manage_users
|
||||
|
||||
new_roles = roles.split(' ').map(&:to_i)
|
||||
old_roles = @user.roles.pluck(:id)
|
||||
|
||||
added_role_ids = new_roles - old_roles
|
||||
removed_role_ids = old_roles - new_roles
|
||||
|
||||
added_roles = []
|
||||
removed_roles = []
|
||||
current_user_role = current_user.highest_priority_role
|
||||
|
||||
# Check that the user has the permissions to add all the new roles
|
||||
added_role_ids.each do |id|
|
||||
role = Role.find(id)
|
||||
|
||||
# Admins are able to add the admin role to other users. All other roles may only
|
||||
# add roles with a higher priority
|
||||
if (role.priority > current_user_role.priority || current_user_role.name == "admin") &&
|
||||
role.provider == @user_domain
|
||||
added_roles << role
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
# Check that the user has the permissions to remove all the deleted roles
|
||||
removed_role_ids.each do |id|
|
||||
role = Role.find(id)
|
||||
|
||||
# Admins are able to remove the admin role from other users. All other roles may only
|
||||
# remove roles with a higher priority
|
||||
if (role.priority > current_user_role.priority || current_user_role.name == "admin") &&
|
||||
role.provider == @user_domain
|
||||
removed_roles << role
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
# Send promoted/demoted emails
|
||||
added_roles.each { |role| send_user_promoted_email(@user, role) if role.send_promoted_email }
|
||||
removed_roles.each { |role| send_user_demoted_email(@user, role) if role.send_demoted_email }
|
||||
|
||||
# Update the roles
|
||||
@user.roles.delete(removed_roles)
|
||||
@user.roles << added_roles
|
||||
|
||||
# Make sure each user always has at least the user role
|
||||
@user.roles = [Role.find_by(name: "user", provider: @user_domain)] if @user.roles.count.zero?
|
||||
|
||||
@user.save!
|
||||
end
|
||||
|
||||
# Updates a roles priority
|
||||
def update_priority(role_to_update)
|
||||
user_role = Role.find_by(name: "user", provider: @user_domain)
|
||||
admin_role = Role.find_by(name: "admin", provider: @user_domain)
|
||||
|
||||
current_user_role = current_user.highest_priority_role
|
||||
|
||||
# Users aren't allowed to update the priority of the admin or user roles
|
||||
return false if role_to_update.include?(user_role.id.to_s) || role_to_update.include?(admin_role.id.to_s)
|
||||
|
||||
# Restrict users to only updating the priority for roles in their domain with a higher
|
||||
# priority
|
||||
role_to_update.each do |id|
|
||||
role = Role.find(id)
|
||||
return false if role.priority <= current_user_role.priority || role.provider != @user_domain
|
||||
end
|
||||
|
||||
# Update the roles priority including the user role
|
||||
top_priority = 0
|
||||
|
||||
role_to_update.each_with_index do |id, index|
|
||||
new_priority = index + [current_user_role.priority, 0].max + 1
|
||||
top_priority = new_priority
|
||||
Role.where(id: id).update_all(priority: new_priority)
|
||||
end
|
||||
|
||||
user_role.priority = top_priority + 1
|
||||
user_role.save!
|
||||
end
|
||||
|
||||
# Update Permissions
|
||||
def update_permissions(role)
|
||||
current_user_role = current_user.highest_priority_role
|
||||
|
||||
# Checks that it is valid for the provider to update the role
|
||||
return false if role.priority <= current_user_role.priority || role.provider != @user_domain
|
||||
|
||||
role_params = params.require(:role).permit(:name)
|
||||
permission_params = params.require(:role).permit(:can_create_rooms, :send_promoted_email,
|
||||
:send_demoted_email, :can_edit_site_settings, :can_edit_roles, :can_manage_users, :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
|
||||
if role.name != role_params[:name] && !Role.duplicate_name(role_params[:name], @user_domain) &&
|
||||
!role_params[:name].strip.empty?
|
||||
role.name = role_params[:name]
|
||||
elsif role.name != role_params[:name]
|
||||
return false
|
||||
end
|
||||
|
||||
role.update(permission_params)
|
||||
|
||||
role.save!
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user