57 lines
1.8 KiB
PHP
57 lines
1.8 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
/**
|
|
* Cek permission user
|
|
* @param string $key => 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;
|
|
}
|