forked from External/greenlight
GRN2-309: Allows admins to edit a non-local users name and email (#2389)
* Allows admins to edit a non-local users name and email * Fixed edge case
This commit is contained in:
parent
86e6056d3c
commit
b2500e6504
|
@ -194,6 +194,14 @@ class ApplicationController < ActionController::Base
|
||||||
end
|
end
|
||||||
helper_method :allowed_file_types
|
helper_method :allowed_file_types
|
||||||
|
|
||||||
|
# Allows admins to edit a user's details
|
||||||
|
def can_edit_user?(user_to_edit, editting_user)
|
||||||
|
return user_to_edit.greenlight_account? if user_to_edit == editting_user
|
||||||
|
|
||||||
|
editting_user.admin_of?(user_to_edit, "can_manage_users")
|
||||||
|
end
|
||||||
|
helper_method :can_edit_user?
|
||||||
|
|
||||||
# Returns the page that the logo redirects to when clicked on
|
# Returns the page that the logo redirects to when clicked on
|
||||||
def home_page
|
def home_page
|
||||||
return admins_path if current_user.has_role? :super_admin
|
return admins_path if current_user.has_role? :super_admin
|
||||||
|
|
|
@ -92,7 +92,7 @@ class UsersController < ApplicationController
|
||||||
|
|
||||||
redirect_path = current_user.admin_of?(@user, "can_manage_users") ? path : edit_user_path(@user)
|
redirect_path = current_user.admin_of?(@user, "can_manage_users") ? path : edit_user_path(@user)
|
||||||
|
|
||||||
unless @user.greenlight_account?
|
unless can_edit_user?(@user, current_user)
|
||||||
params[:user][:name] = @user.name
|
params[:user][:name] = @user.name
|
||||||
params[:user][:email] = @user.email
|
params[:user][:email] = @user.email
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||||
%>
|
%>
|
||||||
|
|
||||||
|
<% readonly = !can_edit_user?(@user, current_user) %>
|
||||||
|
|
||||||
<%= form_for @user, url: update_user_path, method: :post do |f| %>
|
<%= form_for @user, url: update_user_path, method: :post do |f| %>
|
||||||
<%= hidden_field_tag :setting, "account" %>
|
<%= hidden_field_tag :setting, "account" %>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -20,14 +22,14 @@
|
||||||
<div class="col-sm-6 mb-4">
|
<div class="col-sm-6 mb-4">
|
||||||
<%= f.label :name, t("settings.account.fullname"), class: "form-label" %>
|
<%= f.label :name, t("settings.account.fullname"), class: "form-label" %>
|
||||||
<div class="input-icon">
|
<div class="input-icon">
|
||||||
<%= f.text_field :name, class: "form-control #{form_is_invalid?(@user, :name)}", placeholder: t("settings.account.fullname"), readonly: !@user.greenlight_account? %>
|
<%= f.text_field :name, class: "form-control #{form_is_invalid?(@user, :name)}", placeholder: t("settings.account.fullname"), readonly: readonly %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-6 mb-4">
|
<div class="col-sm-6 mb-4">
|
||||||
<%= f.label :email, t("email"), class: "form-label" %>
|
<%= f.label :email, t("email"), class: "form-label" %>
|
||||||
<div class="input-icon">
|
<div class="input-icon">
|
||||||
<%= f.email_field :email, class: "form-control #{form_is_invalid?(@user, :email)}", placeholder: t("email"), readonly: !@user.greenlight_account? %>
|
<%= f.email_field :email, class: "form-control #{form_is_invalid?(@user, :email)}", placeholder: t("email"), readonly: readonly %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -329,7 +329,7 @@ describe UsersController, type: :controller do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "POST #update" do
|
describe "POST #update" do
|
||||||
it "properly updates user attributes" do
|
it "properly updates usser attributes" do
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
@request.session[:user_id] = user.id
|
@request.session[:user_id] = user.id
|
||||||
|
|
||||||
|
@ -358,6 +358,22 @@ describe UsersController, type: :controller do
|
||||||
expect(response).to redirect_to(edit_user_path(user))
|
expect(response).to redirect_to(edit_user_path(user))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "allows admins to update a non local accounts name/email" do
|
||||||
|
allow_any_instance_of(User).to receive(:greenlight_account?).and_return(false)
|
||||||
|
user = create(:user)
|
||||||
|
admin = create(:user).set_role :admin
|
||||||
|
@request.session[:user_id] = admin.id
|
||||||
|
|
||||||
|
params = random_valid_user_params
|
||||||
|
post :update, params: params.merge!(user_uid: user)
|
||||||
|
user.reload
|
||||||
|
|
||||||
|
expect(user.name).to eql(params[:user][:name])
|
||||||
|
expect(user.email).to eql(params[:user][:email])
|
||||||
|
expect(flash[:success]).to be_present
|
||||||
|
expect(response).to redirect_to(admins_path)
|
||||||
|
end
|
||||||
|
|
||||||
it "renders #edit on unsuccessful save" do
|
it "renders #edit on unsuccessful save" do
|
||||||
@user = create(:user)
|
@user = create(:user)
|
||||||
@request.session[:user_id] = @user.id
|
@request.session[:user_id] = @user.id
|
||||||
|
|
Loading…
Reference in New Issue