User Authentication & Authorization
This example demonstrates how to implement a simple user registration, login, and role-based access control in LavaLust.
Folder Structure
app/
├── controllers/
│ └── AuthController.php
│
├── libraries/
│ └── Lauth.php
│
└── views/
└── auth/
├── register.php
├── login.php
└── dashboard.php
Database Table Structure
Table: users
Column |
Type |
Null |
Key |
Description |
|---|---|---|---|---|
id |
INT |
NO |
PK AI |
User ID |
username |
VARCHAR(50) |
NO |
UNI |
Username |
password |
VARCHAR(255) |
NO |
Hashed password |
|
role |
ENUM(‘admin’,’user’) |
NO |
User role |
|
created_at |
DATETIME |
NO |
Account creation timestamp |
Library Example
<?php
//routes
$router->match('/auth/login', 'AuthController::login', ['GET', 'POST']);
$router->match('/auth/register', 'AuthController::register', ['GET', 'POST']);
$router->get('auth/dashboard', 'AuthController::dashboard');
$router->get('/auth/logout', 'AuthController::logout');
?>
<?php
class Auth
{
protected $_lava;
public function __construct()
{
$this->_lava = lava_instance();
$this->_lava->call->database();
$this->_lava->call->library('session');
}
/**
* Register a new user
*
* @param string $username
* @param string $password
* @param string $role
* @return bool
*/
public function register($username, $password, $role = 'user')
{
$hash = password_hash($password, PASSWORD_DEFAULT);
return $this->_lava->db->table('users')->insert([
'username' => $username,
'password' => $hash,
'role' => $role,
'created_at' => date('Y-m-d H:i:s')
]);
}
/**
* Login user
*
* @param string $username
* @param string $password
* @return bool
*/
public function login($username, $password)
{
$user = $this->_lava->db->table('users')
->where('username', $username)
->get();
if ($user && password_verify($password, $user['password'])) {
$this->_lava->session->set_userdata([
'user_id' => $user['id'],
'username' => $user['username'],
'role' => $user['role'],
'logged_in' => true
]);
return true;
}
return false;
}
/**
* Check if user is logged in
*
* @return bool
*/
public function is_logged_in()
{
return (bool) $this->_lava->session->userdata('logged_in');
}
/**
* Check user role
*
* @param string $role
* @return bool
*/
public function has_role($role)
{
return $this->_lava->session->userdata('role') === $role;
}
/**
* Logout user
*
* @return void
*/
public function logout()
{
$this->_lava->session->unset_userdata(['user_id','username','role','logged_in']);
}
}
?>
Model Example
<?php
class UserModel extends Model
{
protected $table = 'users';
public function get_user_by_id($id)
{
return $this->db->table($this->table)
->where('id', $id)
->get();
}
public function get_all_users()
{
return $this->db->table($this->table)->get_all();
}
}
?>
Controller Example
<?php
class AuthController extends Controller
{
public function register()
{
$this->call->library('auth');
if ($this->io->method() == 'post') {
$username = $this->io->post('username');
$password = $this->io->post('password');
$role = $this->io->post('role') ?? 'user';
if ($this->auth->register($username, $password, $role)) {
redirect('auth/login');
}
}
$this->call->view('auth/register');
}
public function login()
{
$this->call->library('auth');
if ($this->io->method() == 'post') {
$username = $this->io->post('username');
$password = $this->io->post('password');
if ($this->auth->login($username, $password)) {
redirect('auth/dashboard');
} else {
echo 'Login failed!';
}
}
$this->call->view('auth/login');
}
public function dashboard()
{
$this->call->library(['auth', 'session']);
if (!$this->auth->is_logged_in()) {
redirect('auth/login');
}
if (!$this->auth->has_role('admin')) {
echo 'Access denied!';
exit;
}
$this->call->view('auth/dashboard', ['session' => $this->session]);
}
public function logout()
{
$this->call->library('auth');
$this->auth->logout();
redirect('auth/login');
}
}
?>
View Example
<!-- register.php -->
<form action="<?=site_url('auth/register');?>" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<select name="role">
<option value="user">User</option>
<option value="admin">Admin</option>
</select>
<button type="submit">Register</button>
</form>
<!-- login.php -->
<form action="<?=site_url('auth/login');?>" method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
<!-- dashboard.php -->
<h1>Welcome, <?= $session->userdata('username') ?>!</h1>
<p>Role: <?= $session->userdata('role') ?></p>
<a href="<?= site_url('auth/logout') ?>">Logout</a>