diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index ce752999..0cf463a6 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -31,6 +31,8 @@ class AdminsController < ApplicationController before_action :find_deleted_user, only: manage_deleted_users before_action :verify_admin_of_user, only: [manage_users, manage_deleted_users] + helper_method :perm_to_record_meeting + # GET /admins def index # Initializa the data manipulation variables diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index cfdd66c8..06c922ec 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -180,7 +180,7 @@ class ApplicationController < ActionController::Base end helper_method :shared_access_allowed - # Indicates whether users are allowed to share rooms + # Indicates whether users should consent recoding when joining rooms def recording_consent_required? @settings.get_value("Require Recording Consent") == "true" end diff --git a/app/controllers/concerns/recorder.rb b/app/controllers/concerns/recorder.rb index 0365fb2d..6093733e 100644 --- a/app/controllers/concerns/recorder.rb +++ b/app/controllers/concerns/recorder.rb @@ -123,6 +123,15 @@ module Recorder end end + def perm_to_record_meeting + # define perm without init config of room setting + if recording_consent_required? + @settings.get_value("Room Configuration Recording") != "disabled" && current_user&.role&.get_permission("can_launch_recording") + else + current_user&.role&.get_permission("can_launch_recording") + end + end + private # Gets the email of the room owner to which the recording belongs to diff --git a/app/controllers/concerns/rolify.rb b/app/controllers/concerns/rolify.rb index a49092f8..868cd87e 100644 --- a/app/controllers/concerns/rolify.rb +++ b/app/controllers/concerns/rolify.rb @@ -120,7 +120,7 @@ module Rolify 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, - :can_manage_rooms_recordings, :can_appear_in_share_list, :colour) + :can_launch_recording, :can_manage_rooms_recordings, :can_appear_in_share_list, :colour) permission_params.transform_values! do |v| case v diff --git a/app/controllers/rooms_controller.rb b/app/controllers/rooms_controller.rb index fd4233c1..0472b99c 100644 --- a/app/controllers/rooms_controller.rb +++ b/app/controllers/rooms_controller.rb @@ -35,6 +35,8 @@ class RoomsController < ApplicationController before_action :verify_user_not_admin, only: [:show] skip_before_action :verify_authenticity_token, only: [:join] + helper_method :perm_to_record_meeting + # POST / def create # Return to root if user is not signed in @@ -436,9 +438,9 @@ class RoomsController < ApplicationController def record_meeting # If the require consent setting is checked, then check the room setting, else, set to true if recording_consent_required? - room_setting_with_config("recording") + room_setting_with_config("recording") && current_user&.role&.get_permission("can_launch_recording") else - true + current_user&.role&.get_permission("can_launch_recording") end end diff --git a/app/models/role.rb b/app/models/role.rb index b9af4b89..8fcae4b7 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -38,13 +38,13 @@ class Role < ApplicationRecord Role.create(name: "admin", provider: provider, priority: 0, colour: "#f1c40f") .update_all_role_permissions(can_create_rooms: true, send_promoted_email: true, send_demoted_email: true, can_edit_site_settings: true, can_manage_rooms_recordings: true, - can_edit_roles: true, can_manage_users: true) + can_launch_recording: true, can_edit_roles: true, can_manage_users: true) Role.create(name: "pending", provider: provider, priority: -1, colour: "#17a2b8").update_all_role_permissions Role.create(name: "denied", provider: provider, priority: -2, colour: "#343a40").update_all_role_permissions Role.create(name: "super_admin", provider: provider, priority: -3, colour: "#cd201f") - .update_all_role_permissions(can_create_rooms: true, - send_promoted_email: true, send_demoted_email: true, can_edit_site_settings: true, - can_edit_roles: true, can_manage_users: true, can_manage_rooms_recordings: true) + .update_all_role_permissions(can_create_rooms: true, send_promoted_email: true, + send_demoted_email: true, can_edit_site_settings: true, can_manage_rooms_recordings: true, + can_launch_recording: true, can_edit_roles: true, can_manage_users: true) end def self.create_new_role(role_name, provider) @@ -72,6 +72,7 @@ class Role < ApplicationRecord update_permission("can_manage_users", permissions[:can_manage_users].to_s) update_permission("can_manage_rooms_recordings", permissions[:can_manage_rooms_recordings].to_s) update_permission("can_appear_in_share_list", permissions[:can_appear_in_share_list].to_s) + update_permission("can_launch_recording", permissions[:can_launch_recording].to_s) end # Updates the value of the permission and enables it diff --git a/app/views/admins/components/_roles.html.erb b/app/views/admins/components/_roles.html.erb index a622bff6..dcfb7b1b 100644 --- a/app/views/admins/components/_roles.html.erb +++ b/app/views/admins/components/_roles.html.erb @@ -20,8 +20,8 @@
<% @roles.each do |role| %> - <%= link_to admin_roles_path(selected_role: 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}", + <%= link_to admin_roles_path(selected_role: 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 %> <%= translated_role_name(role) %> <% end %> @@ -36,7 +36,7 @@ <%= form_with model: @selected_role, url: admin_update_role_path(@selected_role.id), method: :post do |f| %> <%= f.label :name, t('administrator.roles.name'), class: "form-label" %> <%= f.text_field :name, class: 'form-control mb-3', value: translated_role_name(@selected_role), readonly: edit_disabled || @selected_role.name == "user" || @selected_role.name == "admin", required: true %> - + <%= f.hidden_field :colour, id: "role-colour", value: role_colour(@selected_role) %>
@@ -58,6 +58,11 @@ <%= f.check_box :can_manage_users, checked: @selected_role.get_permission("can_manage_users"), class: "custom-switch-input", disabled: edit_disabled || !current_role.get_permission("can_manage_users") %> + <% end %> - + <% any_start = room_configuration("Room Configuration Allow Any Start") %> <% if any_start != "disabled" %> <% end %> <% recording = room_configuration("Room Configuration Recording") %> - <% if recording_consent_required? && recording != "disabled" %> + <% if recording_consent_required? && recording != "disabled" && perm_to_record_meeting %>