mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 17:59:47 +02:00
Admin can change other users settings without user password #2646
This commit is contained in:
parent
13b60d39ce
commit
4da89aaa87
9 changed files with 67 additions and 81 deletions
|
@ -65,3 +65,6 @@
|
||||||
.required:after
|
.required:after
|
||||||
content: "*"
|
content: "*"
|
||||||
margin: 0 0 0 1px
|
margin: 0 0 0 1px
|
||||||
|
|
||||||
|
.not-required:after
|
||||||
|
content: ''
|
||||||
|
|
|
@ -57,3 +57,5 @@ body > .container
|
||||||
|
|
||||||
.text-grey
|
.text-grey
|
||||||
color: grey
|
color: grey
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,10 @@ class Admin::AdminUsersController < AdminController
|
||||||
@admin_user = AdminUser.new
|
@admin_user = AdminUser.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def show; end
|
||||||
|
|
||||||
|
def edit; end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@admin_user = AdminUser.new(admin_user_params)
|
@admin_user = AdminUser.new(admin_user_params)
|
||||||
|
|
||||||
|
@ -23,12 +27,11 @@ class Admin::AdminUsersController < AdminController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show; end
|
|
||||||
|
|
||||||
def edit; end
|
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @admin_user.update(admin_user_params)
|
params[:admin_user].delete(:password) if params[:admin_user][:password].blank?
|
||||||
|
params[:admin_user].delete(:password_confirmation) if params[:admin_user][:password_confirmation].blank?
|
||||||
|
|
||||||
|
if @admin_user.update_attributes(admin_user_params)
|
||||||
flash[:notice] = I18n.t('record_updated')
|
flash[:notice] = I18n.t('record_updated')
|
||||||
redirect_to [:admin, @admin_user]
|
redirect_to [:admin, @admin_user]
|
||||||
else
|
else
|
||||||
|
|
|
@ -29,6 +29,7 @@ class Admin::ApiUsersController < AdminController
|
||||||
def edit; end
|
def edit; end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
params[:api_user].delete(:password) if params[:api_user][:password].blank?
|
||||||
if @api_user.update(api_user_params)
|
if @api_user.update(api_user_params)
|
||||||
flash[:notice] = I18n.t('record_updated')
|
flash[:notice] = I18n.t('record_updated')
|
||||||
redirect_to [:admin, @api_user]
|
redirect_to [:admin, @api_user]
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
class AdminUser < User
|
class AdminUser < User
|
||||||
validates :username, :password, :country_code, :roles, presence: true
|
validates :username, :country_code, :roles, presence: true
|
||||||
validates :identity_code, uniqueness: true, allow_blank: true
|
validates :identity_code, uniqueness: true, allow_blank: true
|
||||||
validates :identity_code, presence: true, if: -> { country_code == 'EE' }
|
validates :identity_code, presence: true, if: -> { country_code == 'EE' }
|
||||||
validates :email, presence: true
|
validates :email, presence: true
|
||||||
|
validates :password, :password_confirmation, presence: true, if: :new_record?
|
||||||
|
validates :password_confirmation, presence: true, if: :encrypted_password_changed?
|
||||||
validate :validate_identity_code, if: -> { country_code == 'EE' }
|
validate :validate_identity_code, if: -> { country_code == 'EE' }
|
||||||
|
|
||||||
ROLES = %w(user customer_service admin) # should not match to api_users roles
|
ROLES = %w(user customer_service admin) # should not match to api_users roles
|
||||||
|
|
|
@ -11,14 +11,15 @@
|
||||||
- if @admin_user.new_record? || can?(:update, AdminUser)
|
- if @admin_user.new_record? || can?(:update, AdminUser)
|
||||||
.form-group
|
.form-group
|
||||||
.col-md-4.control-label
|
.col-md-4.control-label
|
||||||
= f.label :password
|
- not_required = @admin_user.new_record? ? '' : 'not-required'
|
||||||
|
= f.label :password, class: not_required
|
||||||
.col-md-8
|
.col-md-8
|
||||||
= f.text_field(:password, class: 'form-control')
|
= f.password_field(:password, class: 'form-control')
|
||||||
.form-group
|
.form-group
|
||||||
.col-md-4.control-label
|
.col-md-4.control-label
|
||||||
= f.label :password_confirmation
|
= f.label :password_confirmation, class: not_required
|
||||||
.col-md-8
|
.col-md-8
|
||||||
= f.text_field(:password_confirmation, class: 'form-control')
|
= f.password_field(:password_confirmation, class: 'form-control')
|
||||||
|
|
||||||
%hr
|
%hr
|
||||||
.form-group
|
.form-group
|
||||||
|
@ -48,3 +49,8 @@
|
||||||
.row
|
.row
|
||||||
.col-md-8.text-right
|
.col-md-8.text-right
|
||||||
= button_tag(t(:save), class: 'btn btn-primary')
|
= button_tag(t(:save), class: 'btn btn-primary')
|
||||||
|
|
||||||
|
:coffee
|
||||||
|
$("#admin_user_password").removeAttr('required')
|
||||||
|
$("#admin_user_password_confirmation").removeAttr('required')
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
= form_for([:admin, @api_user], multipart: true, html: {class: 'form-horizontal'}) do |f|
|
= form_for([:admin, @api_user], multipart: true,
|
||||||
|
html: {class: 'form-horizontal', autocomplete: 'off'}) do |f|
|
||||||
= render 'shared/full_errors', object: @api_user
|
= render 'shared/full_errors', object: @api_user
|
||||||
|
|
||||||
.row
|
.row
|
||||||
|
@ -10,9 +11,11 @@
|
||||||
= f.text_field(:username, class: 'form-control')
|
= f.text_field(:username, class: 'form-control')
|
||||||
.form-group
|
.form-group
|
||||||
.col-md-4.control-label
|
.col-md-4.control-label
|
||||||
= f.label :password
|
- not_required = @api_user.new_record? ? '' : 'not-required'
|
||||||
|
= f.label :password, class: not_required
|
||||||
.col-md-7
|
.col-md-7
|
||||||
= f.text_field(:password, class: 'form-control')
|
= f.text_field :password, class: 'form-control', autocomplete: 'off'
|
||||||
|
|
||||||
.form-group
|
.form-group
|
||||||
.col-md-4.control-label
|
.col-md-4.control-label
|
||||||
= f.label :identity_code
|
= f.label :identity_code
|
||||||
|
@ -48,4 +51,5 @@
|
||||||
= button_tag(t(:save), class: 'btn btn-primary')
|
= button_tag(t(:save), class: 'btn btn-primary')
|
||||||
|
|
||||||
:coffee
|
:coffee
|
||||||
Autocomplete.bindAdminRegistrarSearch();
|
Autocomplete.bindAdminRegistrarSearch()
|
||||||
|
$("#api_user_password").removeAttr('required')
|
||||||
|
|
|
@ -4,7 +4,7 @@ Fabricator(:admin_user) do
|
||||||
username 'gitlab'
|
username 'gitlab'
|
||||||
password 'ghyt9e4fu'
|
password 'ghyt9e4fu'
|
||||||
password_confirmation 'ghyt9e4fu'
|
password_confirmation 'ghyt9e4fu'
|
||||||
email 'info@gitlab.eu'
|
email { sequence(:email) { |i| "info#{i}@example.com" } }
|
||||||
country_code 'FI'
|
country_code 'FI'
|
||||||
roles ['admin']
|
roles ['admin']
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,95 +4,61 @@ require 'cancan/matchers'
|
||||||
describe AdminUser do
|
describe AdminUser do
|
||||||
context 'with invalid attribute' do
|
context 'with invalid attribute' do
|
||||||
before :all do
|
before :all do
|
||||||
@user = AdminUser.new
|
@admin_user = AdminUser.new
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not be valid' do
|
it 'should not be valid' do
|
||||||
@user.valid?
|
@admin_user.valid?
|
||||||
@user.errors.full_messages.should match_array([
|
@admin_user.errors.full_messages.should match_array([
|
||||||
"Country code is missing",
|
"Country code is missing",
|
||||||
"Email Email is missing",
|
"Email Email is missing",
|
||||||
"Email Email is missing",
|
"Email Email is missing",
|
||||||
"Password Password is missing",
|
"Password Password is missing",
|
||||||
"Password Password is missing",
|
"Password Password is missing",
|
||||||
|
"Password confirmation is missing",
|
||||||
"Roles is missing",
|
"Roles is missing",
|
||||||
"Username Username is missing"
|
"Username Username is missing"
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should not have any versions' do
|
it 'should not have any versions' do
|
||||||
@user.versions.should == []
|
@admin_user.versions.should == []
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with valid attributes' do
|
context 'with valid attributes' do
|
||||||
before :all do
|
before :all do
|
||||||
@user = Fabricate(:admin_user)
|
@admin_user = Fabricate(:admin_user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should be valid' do
|
it 'should be valid' do
|
||||||
@user.valid?
|
@admin_user.valid?
|
||||||
@user.errors.full_messages.should match_array([])
|
@admin_user.errors.full_messages.should match_array([])
|
||||||
end
|
end
|
||||||
|
|
||||||
# it 'should be valid twice' do
|
it 'should be valid twice' do
|
||||||
# @user = Fabricate(:admin_user)
|
@admin_user = Fabricate(:admin_user)
|
||||||
# @user.valid?
|
@admin_user.valid?
|
||||||
# @user.errors.full_messages.should match_array([])
|
@admin_user.errors.full_messages.should match_array([])
|
||||||
# end
|
|
||||||
|
|
||||||
# it 'should have one version' do
|
|
||||||
# with_versioning do
|
|
||||||
# @user.versions.should == []
|
|
||||||
# @user.zip = 'New zip'
|
|
||||||
# @user.save
|
|
||||||
# @user.errors.full_messages.should match_array([])
|
|
||||||
# @user.versions.size.should == 1
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# describe 'abilities' do
|
it 'should have one version' do
|
||||||
# subject(:ability) { Ability.new(user) }
|
with_versioning do
|
||||||
# let(:user) { nil }
|
@admin_user.versions.should == []
|
||||||
|
@admin_user.updated_at = Time.zone.now
|
||||||
# context 'when user is admin' do
|
@admin_user.save
|
||||||
# let(:user) { Fabricate(:admin_user) }
|
@admin_user.errors.full_messages.should match_array([])
|
||||||
|
@admin_user.versions.size.should == 1
|
||||||
# it { should be_able_to(:manage, Domain.new) }
|
end
|
||||||
# it { should be_able_to(:manage, Contact.new) }
|
end
|
||||||
# it { should be_able_to(:manage, Registrar.new) }
|
|
||||||
# it { should be_able_to(:manage, Setting.new) }
|
it 'should require password confirmation when changing password' do
|
||||||
# it { should be_able_to(:manage, ZonefileSetting.new) }
|
@admin_user.valid?.should == true
|
||||||
# it { should be_able_to(:manage, DomainVersion.new) }
|
@admin_user.password = 'not confirmed'
|
||||||
# it { should be_able_to(:manage, User.new) }
|
@admin_user.valid?
|
||||||
# it { should be_able_to(:manage, ApiUser.new) }
|
@admin_user.errors.full_messages.should match_array([
|
||||||
# it { should be_able_to(:manage, Keyrelay.new) }
|
"Password confirmation doesn't match Password"
|
||||||
# it { should be_able_to(:manage, LegalDocument.new) }
|
])
|
||||||
# it { should be_able_to(:read, ApiLog::EppLog.new) }
|
end
|
||||||
# it { should be_able_to(:read, ApiLog::ReppLog.new) }
|
end
|
||||||
# it { should be_able_to(:index, :delayed_job) }
|
|
||||||
# it { should be_able_to(:create, :zonefile) }
|
|
||||||
# it { should be_able_to(:access, :settings_menu) }
|
|
||||||
# end
|
|
||||||
|
|
||||||
# context 'when user is customer service' do
|
|
||||||
# let(:user) { Fabricate(:user, roles: ['customer_service']) }
|
|
||||||
|
|
||||||
# it { should be_able_to(:manage, Domain.new) }
|
|
||||||
# it { should be_able_to(:manage, Contact.new) }
|
|
||||||
# it { should be_able_to(:manage, Registrar.new) }
|
|
||||||
# it { should_not be_able_to(:manage, Setting.new) }
|
|
||||||
# it { should_not be_able_to(:manage, ZonefileSetting.new) }
|
|
||||||
# it { should_not be_able_to(:manage, DomainVersion.new) }
|
|
||||||
# it { should_not be_able_to(:manage, User.new) }
|
|
||||||
# it { should_not be_able_to(:manage, ApiUser.new) }
|
|
||||||
# it { should_not be_able_to(:manage, LegalDocument.new) }
|
|
||||||
# it { should_not be_able_to(:read, ApiLog::EppLog.new) }
|
|
||||||
# it { should_not be_able_to(:read, ApiLog::ReppLog.new) }
|
|
||||||
# it { should_not be_able_to(:index, :delayed_job) }
|
|
||||||
# it { should_not be_able_to(:create, :zonefile) }
|
|
||||||
# it { should_not be_able_to(:access, :settings_menu) }
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue