Files
UbuntuandClaude Opus 4.6 420bcb37fd Security hardening: fix SQLi, XSS, file upload, and migrate DB to RDS
- Fix all SQL injection vulnerabilities across Service_model, User_model,
  Module_model, Log_model, and Admin controller using parameterized queries
- Add htmlspecialchars() to all user-controlled output in admin views
  (bookings, services, workers, service categories, login form)
- Fix XSS in AJAX worker response and manage-booking-cancelled view
- Add file extension whitelist (jpg, jpeg, png, gif, webp) to all uploads
- Remove webshell (pentest2.php) from assets/img/profiles/
- Stop logging plaintext passwords on failed login attempts
- Migrate database.php hostname from localhost to AWS RDS endpoint
- Fix dropdown styling (white-on-white) in worker calendar view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-07 13:00:32 +00:00

257 lines
6.1 KiB
PHP
Executable File

<?php
class Module_model extends CI_Model {
function __construct(){
parent::__construct();
}
public function getAllModule(){
$this->load->database();
$query = $this->db->query('SELECT * FROM modules ORDER BY module_name ASC');
return $query->result();
}
public function getModuleById($module_id){
$this->load->database();
$query = $this->db->query('SELECT * FROM modules WHERE module_id = ? LIMIT 1', array($module_id));
return $query->result()[0];
}
public function getModuleBySlug($module_slug){
$this->load->database();
$query = $this->db->query('SELECT * FROM modules WHERE module_slug = ? LIMIT 1', array($module_slug));
return $query->result()[0];
}
public function getUserModules($userId){
$this->load->database();
$this->load->model('User_model');
$currentUser = $this->User_model->getUserById($userId);
$query = $this->db->query('SELECT * FROM modules');
$all_module = $query->result();
$activeModules = array();
$activeModuleIds = array();
foreach($all_module as $moduleItem){
//check groupmodules
$moduleGroupIds = unserialize($moduleItem->permission_group_ids);
$moduleUserIds = unserialize($moduleItem->permission_ids);
if(!empty($moduleItem->permission_ids)){
}
//check group ids
if(is_array($moduleGroupIds)){
if(in_array($currentUser->permission_id, $moduleGroupIds)){
if(!in_array($moduleItem->module_id, $activeModuleIds)){
$activeModules[] = $moduleItem;
$activeModuleIds[] = $moduleItem->module_id;
}
}
}
//check user_ids
if(is_array($moduleUserIds)){
if(in_array($currentUser->user_id, $moduleUserIds)){
if(!in_array($moduleItem->module_id, $activeModuleIds)){
$activeModules[] = $moduleItem;
$activeModuleIds[] = $moduleItem->module_id;
}
}
}
}
return $activeModules;
}
public function is_module_available($module_id, $userId){
$this->load->database();
$this->load->model('User_model');
$currentModule = $this->getModuleById($module_id);
$currentUser = $this->User_model->getUserById($userId);
$moduleGroupIds = unserialize($currentModule->permission_group_ids);
$moduleUserIds = unserialize($currentModule->permission_ids);
$moduleIsOk = 0;
//if($currentUser->permission_slug == 'admin' && $module_id != '5'){
if($currentUser->permission_slug == 'admin'){
$moduleIsOk = 1;
}
//check groupmodules
if(is_array($moduleGroupIds)){
if(in_array($currentUser->permission_id, $moduleGroupIds)){
$moduleIsOk = 1;
}
}
//check user_ids
if(is_array($moduleUserIds)){
if(in_array($currentUser->user_id, $moduleUserIds)){
$moduleIsOk = 1;
}
}
if($moduleIsOk){
return 1;
}
else{
return 0;
}
}
public function is_userId_available_in_module($module_id, $userId){
$this->load->database();
$this->load->model('User_model');
$currentModule = $this->getModuleById($module_id);
$userIds = unserialize($currentModule->permission_ids);
if(is_array($userIds)){
if(in_array($userId, $userIds)){
return 1;
}
}
}
public function is_groupId_available_in_module($module_id, $groupId){
$this->load->database();
$this->load->model('User_model');
$currentModule = $this->getModuleById($module_id);
$moduleGroupIds = unserialize($currentModule->permission_group_ids);
if(is_array($moduleGroupIds)){
if(in_array($groupId, $moduleGroupIds)){
return 1;
}
}
}
public function updateModule($fieldName, $module_id, $moduleUserArray){
$this->load->database();
$allowedFields = array('permission_group_ids', 'permission_ids');
if (!in_array($fieldName, $allowedFields)) return;
if(!empty($moduleUserArray)){
$this->db->where('module_id', $module_id);
$this->db->update('modules', array($fieldName => serialize($moduleUserArray)));
}
else{
$this->db->where('module_id', $module_id);
$this->db->update('modules', array($fieldName => ''));
}
}
public function getModulesByPermissionSlug($permissionSlug){
$this->load->database();
$this->load->model('Module_model');
$selectedPermission = $this->Module_model->getPermissionBySlug($permissionSlug);
$query = $this->db->query('SELECT * FROM modules;');
$results = $query->result();
$resultArray = array();
foreach($results as $resultItem){
$permissionIdsArray = explode(',', $resultItem->permission_ids);
if(in_array($selectedPermission->permission_id, $permissionIdsArray)){
$resultArray[] = $resultItem;
}
}
return $resultArray;
}
public function getPermissionBySlug($permissionSlug){
$this->load->database();
$query = $this->db->query('SELECT * FROM permissions WHERE permission_slug = ?', array($permissionSlug));
if($query->num_rows() == 1){
return $query->result()[0];
}
else{
return 0;
}
}
public function user_can_access_this_module($moduleSlug, $userId){
$this->load->database();
$this->load->model('User_model');
$selectedUser = $this->User_model->getUserById($userId);
$query = $this->db->query('SELECT * FROM modules WHERE module_slug = ? LIMIT 1', array($moduleSlug));
if($query->num_rows() == 1){
$result = $query->result()[0];
$permissionArray = explode(',', $result->permission_ids);
if(in_array($selectedUser->permission_id, $permissionArray)){
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
}
}
?>