nama fitur (misal: 'siswa', 'dashboard') * @param string $action => action yang dicek (misal: 'can_view', 'can_export') * @return bool */ function is_master_admin_user() { static $resolved = array(); $CI =& get_instance(); $roleId = (int) $CI->session->userdata('role_id'); $roleName = strtolower(trim((string) $CI->session->userdata('role'))); if ((int) $CI->session->userdata('is_super_admin') === 1) { return true; } // Kompatibilitas untuk session lama sebelum flag super-admin disimpan. if (in_array($roleName, array('admin', 'master admin', 'master admin/admin'), true)) { return true; } if ($roleId < 1 || !isset($CI->db) || !$CI->db->table_exists('roles')) { return false; } if (!array_key_exists($roleId, $resolved)) { $role = $CI->db->select('is_super_admin,is_active')->get_where('roles', array('id' => $roleId))->row(); $resolved[$roleId] = $role && (int)$role->is_active === 1 && (int)$role->is_super_admin === 1; } return $resolved[$roleId]; } function check_permission($key, $action = 'can_view') { $CI =& get_instance(); if (is_master_admin_user()) { return true; } $permissions = $CI->session->userdata('permissions'); if (!$permissions || !is_array($permissions)) { return false; } // Pastikan key ada if (!isset($permissions[$key])) { return false; } // Jika value berupa array (multiple permissions), cek dengan in_array if (is_array($permissions[$key])) { return in_array($action, $permissions[$key]); } // Jika value berupa string tunggal return $permissions[$key] === $action; }