Files
librenms-librenms/includes/html/pages/edituser.inc.php
Tony Murray 6e6e54cb98 New User Management (#9348)
* Rewrite user management.

Error management

Revert edituser legacy page

Connect user permissions button to legacy page for now.

Implement user creation
Refine form

Remove PingCheck.php accidental add :)

Fixes for redirection and deletion

More fixes: realname accidental validation setting, hide can modify for read-only auths

Use a panel to improve style

Add icon to panel-title

Not allowed to delete own user (at least via the click of a button)

Use request validation to reduce complexity of controller.
Improve protection against users doing things they should not.

Switch to horizontal form and not nearly as wide of layout :)

delete without refresh.
Fix for buttons

Include all users (not just from this auth)
Hide the auth column if there is only one auth type

Show username if real name isn't set

Don't allow creation of demo users via the webui

a fix to the lnms user:add command, it didn't set auth_id

update edituser.inc.php to current
just redirect to users page

* Remove TwoFactorTest for now

* Update edituser.inc.php

* Update .env.dusk.testing

* Enable 2fa for 2fa test...
2019-04-22 19:01:39 -05:00

255 lines
10 KiB
PHP

<?php
use App\Models\User;
use LibreNMS\Authentication\LegacyAuth;
$no_refresh = true;
require 'includes/html/javascript-interfacepicker.inc.php';
echo "<div style='margin: 10px;'>";
$pagetitle[] = 'Edit user';
if (! Auth::user()->hasGlobalAdmin()) {
include 'includes/html/error-no-perm.inc.php';
} else {
if ($vars['user_id'] && !$vars['edit']) {
/** @var User $user */
$user = User::find($vars['user_id']);
$user_data = $user->toArray(); // for compatibility with current code
echo '<p><h2>'.$user_data['realname']."</h2></p>";
// Perform actions if requested
if ($vars['action'] == 'deldevperm') {
if (dbFetchCell('SELECT COUNT(*) FROM devices_perms WHERE `device_id` = ? AND `user_id` = ?', array($vars['device_id'], $user_data['user_id']))) {
dbDelete('devices_perms', '`device_id` = ? AND `user_id` = ?', array($vars['device_id'], $user_data['user_id']));
}
}
if ($vars['action'] == 'adddevperm') {
if (!dbFetchCell('SELECT COUNT(*) FROM devices_perms WHERE `device_id` = ? AND `user_id` = ?', array($vars['device_id'], $user_data['user_id']))) {
dbInsert(array('device_id' => $vars['device_id'], 'user_id' => $user_data['user_id']), 'devices_perms');
}
}
if ($vars['action'] == 'delifperm') {
if (dbFetchCell('SELECT COUNT(*) FROM ports_perms WHERE `port_id` = ? AND `user_id` = ?', array($vars['port_id'], $user_data['user_id']))) {
dbDelete('ports_perms', '`port_id` = ? AND `user_id` = ?', array($vars['port_id'], $user_data['user_id']));
}
}
if ($vars['action'] == 'addifperm') {
if (!dbFetchCell('SELECT COUNT(*) FROM ports_perms WHERE `port_id` = ? AND `user_id` = ?', array($vars['port_id'], $user_data['user_id']))) {
dbInsert(array('port_id' => $vars['port_id'], 'user_id' => $user_data['user_id']), 'ports_perms');
}
}
if ($vars['action'] == 'delbillperm') {
if (dbFetchCell('SELECT COUNT(*) FROM bill_perms WHERE `bill_id` = ? AND `user_id` = ?', array($vars['bill_id'], $user_data['user_id']))) {
dbDelete('bill_perms', '`bill_id` = ? AND `user_id` = ?', array($vars['bill_id'], $user_data['user_id']));
}
}
if ($vars['action'] == 'addbillperm') {
if (!dbFetchCell('SELECT COUNT(*) FROM bill_perms WHERE `bill_id` = ? AND `user_id` = ?', array($vars['bill_id'], $user_data['user_id']))) {
dbInsert(array('bill_id' => $vars['bill_id'], 'user_id' => $user_data['user_id']), 'bill_perms');
}
}
echo '<div class="row">
<div class="col-md-4">';
// Display devices this users has access to
echo '<h3>Device Access</h3>';
echo "<div class='panel panel-default panel-condensed'>
<table class='table table-hover table-condensed table-striped'>
<tr>
<th>Device</th>
<th>Action</th>
</tr>";
$device_perms = dbFetchRows('SELECT * from devices_perms as P, devices as D WHERE `user_id` = ? AND D.device_id = P.device_id', array($user_data['user_id']));
foreach ($device_perms as $device_perm) {
echo '<tr><td><strong>'.format_hostname($device_perm)."</td><td> <a href='edituser/action=deldevperm/user_id=".$vars['user_id'].'/device_id='.$device_perm['device_id']."'><i class='fa fa-trash fa-lg icon-theme' aria-hidden='true'></i></a></strong></td></tr>";
$access_list[] = $device_perm['device_id'];
$permdone = 'yes';
}
echo '</table>
</div>';
if (!$permdone) {
echo 'None Configured';
}
// Display devices this user doesn't have access to
echo '<h4>Grant access to new device</h4>';
echo "<form class='form-inline' role='form' method='post' action=''>
<input type='hidden' value='".$user_data['user_id']."' name='user_id'>
<input type='hidden' value='edituser' name='page'>
<input type='hidden' value='adddevperm' name='action'>
<div class='form-group'>
<label class='sr-only' for='device_id'>Device</label>
<select name='device_id' id='device_id' class='form-control'>";
$devices = dbFetchRows('SELECT * FROM `devices` ORDER BY hostname');
foreach ($devices as $device) {
unset($done);
foreach ($access_list as $ac) {
if ($ac == $device['device_id']) {
$done = 1;
}
}
if (!$done) {
echo "<option value='".$device['device_id']."'>".format_hostname($device, $device['hostname']).'</option>';
}
}
echo "</select>
</div>
<button type='submit' class='btn btn-default' name='Submit'>Add</button></form>";
echo "</div>
<div class='col-md-4'>";
echo '<h3>Interface Access</h3>';
$interface_perms = dbFetchRows('SELECT * from ports_perms as P, ports as I, devices as D WHERE `user_id` = ? AND I.port_id = P.port_id AND D.device_id = I.device_id', array($user_data['user_id']));
echo "<div class='panel panel-default panel-condensed'>
<table class='table table-hover table-condensed table-striped'>
<tr>
<th>Interface name</th>
<th>Action</th>
</tr>";
foreach ($interface_perms as $interface_perm) {
echo '<tr>
<td>
<strong>'.$interface_perm['hostname'].' - '.$interface_perm['ifDescr'].'</strong>'.''.display($interface_perm['ifAlias'])."
</td>
<td>
&nbsp;&nbsp;<a href='edituser/action=delifperm/user_id=".$user_data['user_id'].'/port_id='.$interface_perm['port_id']."'><i class='fa fa-trash fa-lg icon-theme' aria-hidden='true'></i></a>
</td>
</tr>";
$ipermdone = 'yes';
}
echo '</table>
</div>';
if (!$ipermdone) {
echo 'None Configured';
}
// Display devices this user doesn't have access to
echo '<h4>Grant access to new interface</h4>';
echo "<form action='' method='post' class='form-horizontal' role='form'>
<input type='hidden' value='".$user_data['user_id']."' name='user_id'>
<input type='hidden' value='edituser' name='page'>
<input type='hidden' value='addifperm' name='action'>
<div class='form-group'>
<label for='device' class='col-sm-2 control-label'>Device: </label>
<div class='col-sm-10'>
<select id='device' class='form-control' name='device' onchange='getInterfaceList(this)'>
<option value=''>Select a device</option>";
foreach ($devices as $device) {
unset($done);
foreach ($access_list as $ac) {
if ($ac == $device['device_id']) {
$done = 1;
}
}
if (!$done) {
echo "<option value='".$device['device_id']."'>".format_hostname($device, $device['hostname']).'</option>';
}
}
echo "</select>
</div>
</div>
<div class='form-group'>
<label for='port_id' class='col-sm-2 control-label'>Interface: </label>
<div class='col-sm-10'>
<select class='form-control' id='port_id' name='port_id'>
</select>
</div>
</div>
<div class='form-group'>
<div class='col-sm-12'>
<button type='submit' class='btn btn-default' name='Submit' value='Add'>Add</button>
</div>
</div>
</form>";
echo "</div>
<div class='col-md-4'>";
echo '<h3>Bill Access</h3>';
$bill_perms = dbFetchRows('SELECT * from bills AS B, bill_perms AS P WHERE P.user_id = ? AND P.bill_id = B.bill_id', array($user_data['user_id']));
echo "<div class='panel panel-default panel-condensed'>
<table class='table table-hover table-condensed table-striped'>
<tr>
<th>Bill name</th>
<th>Action</th>
</tr>";
foreach ($bill_perms as $bill_perm) {
echo '<tr>
<td>
<strong>'.$bill_perm['bill_name']."</strong></td><td width=50>&nbsp;&nbsp;<a href='edituser/action=delbillperm/user_id=".$vars['user_id'].'/bill_id='.$bill_perm['bill_id']."'><i class='fa fa-trash fa-lg icon-theme' aria-hidden='true'></i></a>
</td>
</tr>";
$bill_access_list[] = $bill_perm['bill_id'];
$bpermdone = 'yes';
}
echo '</table>
</div>';
if (!$bpermdone) {
echo 'None Configured';
}
// Display devices this user doesn't have access to
echo '<h4>Grant access to new bill</h4>';
echo "<form method='post' action='' class='form-inline' role='form'>
<input type='hidden' value='".$user_data['user_id']."' name='user_id'>
<input type='hidden' value='edituser' name='page'>
<input type='hidden' value='addbillperm' name='action'>
<div class='form-group'>
<label class='sr-only' for='bill_id'>Bill</label>
<select name='bill_id' class='form-control' id='bill_id'>";
$bills = dbFetchRows('SELECT * FROM `bills` ORDER BY `bill_name`');
foreach ($bills as $bill) {
unset($done);
foreach ($bill_access_list as $ac) {
if ($ac == $bill['bill_id']) {
$done = 1;
}
}
if (!$done) {
echo "<option value='".$bill['bill_id']."'>".$bill['bill_name'].'</option>';
}
}
echo "</select>
</div>
<button type='submit' class='btn btn-default' name='Submit' value='Add'>Add</button>
</form>
</div>";
} else {
echo '<script>window.location.replace("' . url('users') . '");</script>';
}//end if
}//end if
echo '</div>';