private static function instance() { if (!self::$instance instanceof SE_PerMan) { self::$instance = new SE_PerMan(); } return self::$instance; }
private function sanitizeFields(&$fields) { if (!is_array($fields)) { return; } $actions = SE_PerMan::getControl('field')->getAllowedActions(); $levels = array(SE_Permissions::LEVEL_NONE, SE_Permissions::LEVEL_ALL); foreach ($fields as $fid => $data) { try { if (count($data) != 4) { throw new Exception('', 115); } if (!RoleManager::fetch($data['role_id']) instanceof Role) { throw new Exception('', 115); } foreach ($actions as $action) { if (!in_array($data[$action], $levels)) { throw new Exception('', 115); } } } catch (Exception $e) { if ($e->getCode() == 115) { unset($fields[$fid]); } } } }
/** * Checks Entries for permissions. * * @param $input * * @return array */ private function sectionsCheckPermissions($input) { $output = $input; $is_symphony_author = Symphony::Engine()->isLoggedIn(); foreach ($output as $handle => &$section) { $schema = FieldManager::fetchFieldsSchema($section['id']); foreach ($section['entries'] as &$entry) { // a logged in Symphony user can skip user permissions check if ($is_symphony_author && !$entry['perm_check']) { continue; } $valid = true; $has_perm_section = SE_PerMan::getControl('section')->check($section['id'], $entry['action'], $entry['id']); if (!$has_perm_section) { $this->error = true; $entry['done'] = true; $valid = false; $entry['res_filters']->appendChild($this->filtersBuildElement('permissions-section', false, __('You do not have enough permissions to perform this operation.'))); } if (!is_array($schema) || empty($schema)) { continue; } // check fields only on EDIT and VIEW b/c there's no practical reason to check other values if ($entry['action'] === SE_Permissions::ACTION_EDIT || $entry['action'] === SE_Permissions::ACTION_VIEW) { foreach ($schema as $field_info) { $field_name = $field_info['element_name']; // make sure this field has data if (!isset($entry['fields'][$field_name])) { continue; } $has_perm_field = SE_PerMan::getControl('field')->check($field_info['id'], $entry['action']); if (!$has_perm_field) { $this->error = true; $entry['done'] = true; $valid = false; $entry['res_filters']->appendChild($this->filtersBuildElement("permissions-field-{$field_name}", false, __('You do not have enough permissions to perform this operation.'))); } } } if (!$valid) { $this->resultEntry($entry['res_entry'], 'error'); } } } return $output; }