function _get_role_data($role_id) { // Load models $this->ci->load->model('dx_auth/roles', 'roles'); $this->ci->load->model('dx_auth/permissions', 'permissions'); // Clear return value $role_name = ''; $parent_roles_id = array(); $parent_roles_name = array(); $permission = array(); $parent_permissions = array(); /* Get role_name, parent_roles_id and parent_roles_name */ // Get role query from role id $query = $this->ci->roles->get_role_by_id($role_id); // Check if role exist if ($query->num_rows() > 0) { // Get row $role = $query->row(); // Get role name $role_name = $role->name; /* Code below will search if user role_id have parent_id > 0 (which mean role_id have parent role_id) and do it recursively until parent_id reach 0 (no parent) or parent_id not found. If anyone have better approach than this code, please let me know. */ // Check if role has parent id if (isset($role->parent_id) && $role->parent_id > 0) { // Add to result array $parent_roles_id[] = $role->parent_id; // Set variable used in looping $finished = FALSE; $parent_id = $role->parent_id; // Get all parent id while ($finished == FALSE) { $i_query = $this->ci->roles->get_role_by_id($parent_id); // If role exist if ($i_query->num_rows() > 0) { // Get row $i_role = $i_query->row(); // Check if role doesn't have parent if ($i_role->parent_id == 0) { // Get latest parent name $parent_roles_name[] = $i_role->name; // Stop looping $finished = TRUE; } else { // Change parent id for next looping $parent_id = $i_role->parent_id; // Add to result array $parent_roles_id[] = $parent_id; $parent_roles_name[] = $i_role->name; } } else { // Remove latest parent_roles_id since parent_id not found array_pop($parent_roles_id); // Stop looping $finished = TRUE; } } } } /* End of Get role_name, parent_roles_id and parent_roles_name */ /* Get user and parents permission */ // Get user role permission $permission = $this->ci->permissions->get_permission_data($role_id); // Get user role parent permissions if (!empty($parent_roles_id)) { $parent_permissions = $this->ci->permissions->get_permissions_data($parent_roles_id); } /* End of Get user and parents permission */ if ($role_id) { $data['role_name'] = Permitions::checkControlPanelAccess($role_id); } // Set return value //$data['role_name'] = $role_name; $data['parent_roles_id'] = $parent_roles_id; $data['parent_roles_name'] = $parent_roles_name; $data['permission'] = $permission; $data['parent_permissions'] = $parent_permissions; return $data; }