edit user nick needs buerocrat

This commit is contained in:
Xu 2023-12-21 10:14:34 +01:00 committed by Igor Scheller
parent ac73489aed
commit 162116998c
2 changed files with 58 additions and 3 deletions

View File

@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace Engelsystem\Migrations;
use Engelsystem\Database\Migration\Migration;
class AddUserEditPermission extends Migration
{
/**
* Run the migration
*/
public function up(): void
{
$db = $this->schema->getConnection();
$db->table('privileges')
->insert([
'name' => 'user.edit', 'description' => 'Edit user',
]);
$editUser = $db->table('privileges')
->where('name', 'user.edit')
->get(['id'])
->first();
$buerocrat = 80;
$db->table('group_privileges')
->insertOrIgnore([
'group_id' => $buerocrat, 'privilege_id' => $editUser->id,
]);
}
/**
* Reverse the migration
*/
public function down(): void
{
$db = $this->schema->getConnection();
$db->table('privileges')
->where('name', 'user.edit')
->delete();
}
}

View File

@ -29,6 +29,7 @@ function admin_user()
$goodie_tshirt = $goodie === GoodieType::Tshirt;
$user_info_edit = auth()->can('user.info.edit');
$user_edit_shirt = auth()->can('user.edit.shirt');
$user_edit = auth()->can('user.edit');
if (!$request->has('id')) {
throw_redirect(users_link());
@ -60,7 +61,8 @@ function admin_user()
$html .= '<tr><td>' . "\n";
$html .= '<table>' . "\n";
$html .= ' <tr><td>' . __('general.nick') . '</td><td>'
. '<input size="40" name="eNick" value="' . htmlspecialchars($user_source->name) . '" class="form-control" maxlength="24">'
. '<input size="40" name="eNick" value="' . htmlspecialchars($user_source->name)
. '" class="form-control" maxlength="24" ' . ($user_edit ? '' : 'disabled') . '>'
. '</td></tr>' . "\n";
$html .= ' <tr><td>' . __('Last login') . '</td><td><p class="help-block">'
. ($user_source->last_login_at ? $user_source->last_login_at->format(__('general.datetime')) : '-')
@ -281,14 +283,19 @@ function admin_user()
case 'save':
$user_source = User::find($user_id);
$changed_email = false;
if ($user_source->settings->email_human) {
$changed_email = $user_source->email !== $request->postData('eemail');
$user_source->email = $request->postData('eemail');
}
$nick = trim($request->get('eNick'));
$nickValid = (new Username())->validate($nick);
if ($nickValid) {
$changed_nick = false;
$old_nick = $user_source->name;
if ($nickValid && $user_edit) {
$changed_nick = $user_source->name !== $nick;
$user_source->name = $nick;
}
$user_source->save();
@ -324,7 +331,11 @@ function admin_user()
$user_source->state->save();
engelsystem_log(
'Updated user: ' . $user_source->name . ' (' . $user_source->id . ')'
'Updated user: ' . ($changed_nick
? ('nick modified form ' . $old_nick . ' to ' . $user_source->name)
: $user_source->name)
. ' (' . $user_source->id . ')'
. ($changed_email ? ', email modified' : '')
. ($goodie_tshirt ? ', t-shirt-size: ' . $user_source->personalData->shirt_size : '')
. ', active: ' . $user_source->state->active
. ', force-active: ' . $user_source->state->force_active