<?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');
    }
?>