<?php
/**
* RBAC: Role Based Access Control functions
* I tried creating like a professional documentation for my code here, I found own how to make a documentation like this on:
* https://docs.phpdoc.org/guide/guides/docblocks.html and https://eclipse.dev/pdt/help/html/phpdoc_comments.htm
*
* This file contains functions to check user permissions based on their assigned roles.
* It uses the database tables workflowManager_hasRole, workflowManager_hasPermission, and workflowManager_Permission
* to determine if a user has a specific permission.
*
* Requires:
* - auth.php for user authentication helper functions
* - Config/db.php for database connection
*/
require_once 'auth.php';
require_once 'Config/db.php';
/**
* Check if the currently logged-in user has a specific permission.
*
* @param string $action The permission action to check (e.g. 'view_reports').
* @return bool True if the user has the permission, false otherwise.
*/
function has_permission($action) {
if (!is_logged_in()) return false;
$user_id = get_current_user_id();
$sql = "SELECT COUNT(*) AS count
FROM workflowManager_hasRole hr
INNER JOIN workflowManager_hasPermission hp ON hr.pkfk_role = hp.pkfk_role
INNER JOIN workflowManager_Permission p ON hp.pkfk_permission = p.pk_permission
WHERE hr.pkfk_user = $user_id AND p.action = '$action'";
// make database connection variable globally accessible
// https://www.w3schools.com/php/php_superglobals_globals.asp
$result = mysqli_query($GLOBALS['conn'], $sql);
$row = mysqli_fetch_assoc($result);
return $row['count'] > 0;
}
/**
* Determine if the user can view all requests.
*
* @return bool
*/
function can_view_all_requests() {
return has_permission('view_reports');
}
/**
* Determine if the user can create new requests.
*
* @return bool
*/
function can_create_requests() {
return has_permission('approve_request');
}
/**
* Determine if the user can edit requests.
*
* @return bool
*/
function can_edit_requests() {
return has_permission('edit_state');
}
/**
* Determine if the user can delete requests.
*
* @return bool
*/
function can_delete_requests() {
return has_permission('delete_state');
}
/**
* Determine if the user can manage roles and permissions.
*
* @return bool
*/
function can_manage_roles() {
return has_permission('audit_workflows');
}
?>