added initial user management
This commit is contained in:
parent
6c936208b7
commit
dcddd22a0b
@ -4,6 +4,7 @@ class AuthController {
|
|||||||
|
|
||||||
|
|
||||||
public function showLoginForm($f3){
|
public function showLoginForm($f3){
|
||||||
|
|
||||||
// store session errors or messages, then clear
|
// store session errors or messages, then clear
|
||||||
$f3->set('error', $f3->get('SESSION.login_error'));
|
$f3->set('error', $f3->get('SESSION.login_error'));
|
||||||
$f3->clear('SESSION.login_error');
|
$f3->clear('SESSION.login_error');
|
||||||
@ -21,7 +22,11 @@ class AuthController {
|
|||||||
$db = $f3->get('DB');
|
$db = $f3->get('DB');
|
||||||
// query for user
|
// query for user
|
||||||
$result = $db->exec(
|
$result = $db->exec(
|
||||||
'SELECT id, username, password, role FROM users WHERE username =? LIMIT 1', $username
|
'SELECT u.id, u.username, u.password, u.role, r.role as role_name
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN roles r ON r.id = u.role
|
||||||
|
WHERE username =?
|
||||||
|
LIMIT 1', $username
|
||||||
);
|
);
|
||||||
|
|
||||||
// verifiy password
|
// verifiy password
|
||||||
@ -31,7 +36,9 @@ class AuthController {
|
|||||||
// valid
|
// valid
|
||||||
$f3->set('SESSION.user', [
|
$f3->set('SESSION.user', [
|
||||||
'id'=> $user['id'],
|
'id'=> $user['id'],
|
||||||
'username' => $user['username']
|
'username' => $user['username'],
|
||||||
|
'role' => $user['role'],
|
||||||
|
'role_name' => $user['role_name']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$f3->reroute('/dashboard');
|
$f3->reroute('/dashboard');
|
||||||
|
|||||||
62
app/controllers/UserController.php
Normal file
62
app/controllers/UserController.php
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class UserController {
|
||||||
|
|
||||||
|
// list all users (admin only)
|
||||||
|
|
||||||
|
protected function check_access($f3){
|
||||||
|
$current_user = $f3->get('SESSION.user');
|
||||||
|
if(!$current_user || $current_user['role_name'] !== 'admin'){
|
||||||
|
$f3->reroute('/login');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index($f3){
|
||||||
|
|
||||||
|
$this->check_access($f3);
|
||||||
|
|
||||||
|
$db = $f3->get('DB');
|
||||||
|
$users = $db->exec(
|
||||||
|
'SELECT u.*, r.role AS role_name
|
||||||
|
FROM users u
|
||||||
|
LEFT JOIN roles r ON r.id = u.role
|
||||||
|
ORDER BY id ASC'
|
||||||
|
);
|
||||||
|
$f3->set('users', $users);
|
||||||
|
|
||||||
|
$f3->set('content', '../ui/views/user/index.html');
|
||||||
|
echo \Template::instance()->render('../ui/templates/layout.html');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function editForm($f3){
|
||||||
|
$this->check_access($f3);
|
||||||
|
|
||||||
|
$user_id = (int) $f3->get('PARAMS.id');
|
||||||
|
$db = $f3->get('DB');
|
||||||
|
|
||||||
|
$rows = $db->exec(
|
||||||
|
'SELECt * FROM users WHERE id = ? LIMIT 1',
|
||||||
|
[$user_id]
|
||||||
|
);
|
||||||
|
if(!$rows){
|
||||||
|
$f3->reroute('/users');
|
||||||
|
}
|
||||||
|
$f3->set('edit_user', $rows[0]);
|
||||||
|
$f3->set('content', '../ui/views/user/edit.html');
|
||||||
|
echo \Template::instance()->render('../ui/templates/layout.html');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($f3){
|
||||||
|
|
||||||
|
$this->check_access($f3);
|
||||||
|
|
||||||
|
$user_id = (int) $f3->get('PARAMS.id');
|
||||||
|
$new_username = $f3->get('POST.username');
|
||||||
|
// $new_role = $f3->get('POST.role_name')
|
||||||
|
$db = $f3->get('DB');
|
||||||
|
$db->exec(
|
||||||
|
'UPDATE users SET username = ? WHERE id =? LIMIT 1',
|
||||||
|
[$new_username, $user_id]);
|
||||||
|
$f3->reroute('/users');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -72,4 +72,10 @@ $f3->route('POST /parsedown/preview', 'ParsedownPreview->view');
|
|||||||
// dashboard
|
// dashboard
|
||||||
$f3->route('GET /dashboard', 'DashboardController->index');
|
$f3->route('GET /dashboard', 'DashboardController->index');
|
||||||
|
|
||||||
|
|
||||||
|
// additional routes
|
||||||
|
$f3->route('GET /users', 'UserController->index');
|
||||||
|
$f3->route('GET /user/@id/edit', 'UserController->editForm');
|
||||||
|
$f3->route('POST /user/@id/update', 'UserController->update');
|
||||||
|
|
||||||
$f3->run();
|
$f3->run();
|
||||||
24
ui/views/user/edit.html
Normal file
24
ui/views/user/edit.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
|
||||||
|
<form method="POST" action="/user/{{@edit_user.id}}/update">
|
||||||
|
<div class="field">
|
||||||
|
<label class="label">Username</label>
|
||||||
|
<div class="control">
|
||||||
|
<input class="input" name="username" type="text" value="{{ @edit_user.username}}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<label class="label">Role</label>
|
||||||
|
<div class="select">
|
||||||
|
<select class="select" name="role">
|
||||||
|
<option value="user">User</option>
|
||||||
|
<option value="admin">Admin</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<div class="control">
|
||||||
|
<button class="button is-primary" type="submit">Edit User</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
18
ui/views/user/index.html
Normal file
18
ui/views/user/index.html
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<div class="block">
|
||||||
|
<h1 class="title">All Users</h1>
|
||||||
|
|
||||||
|
<table class="table table-bordered is-fullwidth">
|
||||||
|
<tr>
|
||||||
|
<th>ID</th><th>Username</th><th>Role</th><th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<repeat group="{{ @users }}" value="{{ @u }}">
|
||||||
|
<tr>
|
||||||
|
<td>{{ @u.id }}</td>
|
||||||
|
<td>{{ @u.username }}</td>
|
||||||
|
<td>{{ @u.role_name }} ( {{ @u.role }} )</td>
|
||||||
|
</tr>
|
||||||
|
</repeat>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
Loading…
x
Reference in New Issue
Block a user