/** * Gets the permission on the module * * @param CStoredObject $object Object to load the permissions of * @param int $permType Permission level * @param CStoredObject $defaultObject Default object to load the permissions from * @param int $user_id User ID * * @return bool */ static function getPermObject(CStoredObject $object, $permType, $defaultObject = null, $user_id = null) { $user = CUser::get($user_id); // Shorteners $class = $object->_class; $id = $object->_id; // Use permission query cache when available if (isset(self::$users_cache[$user->_id][$class][$id])) { return self::$users_cache[$user->_id][$class][$id] >= $permType; } // New cached permissions system : DO NOT REMOVE if (is_array(self::$users_perms)) { self::buildUser($user->_id); $perms = self::$users_perms[$user->_id]; // Object specific, or Class specific, or Module generic $perm = isset($perms[$class][$id]) ? $perms[$class][$id] : (isset($perms[$class]["all"]) ? $perms[$class]["all"] : "module"); // In case of module check, first build module cache, then get value from cache if ($perm == "module") { $mod_id = $object->_ref_module->_id; CPermModule::getPermModule($mod_id, $permType, $user->_id); $perm = CPermModule::$users_cache[$user->_id][$mod_id]["permission"]; } self::$users_cache[$user->_id][$class][$id] = $perm; return $perm >= $permType; } global $userPermsObjects; $object_class = $object->_class; $object_id = $object->_id; if (isset($userPermsObjects[$object_class][$object_id])) { return $userPermsObjects[$object_class][$object_id]->permission >= $permType; } if (isset($userPermsObjects[$object_class][0])) { return $userPermsObjects[$object_class][0]->permission >= $permType; } return $defaultObject != null ? $defaultObject->getPerm($permType) : $object->_ref_module->getPerm($permType); }
*/ CCanDo::checkEdit(); $user_id = CCanDo::edit() ? CValue::getOrSession("user_id", "default") : null; $user = CUser::get($user_id); $prof = $user->profile_id ? CUser::get($user->profile_id) : new CUser(); if ($user_id == "default") { $user->_id = null; } $prefvalues = array("default" => CPreferences::get(null, true), "template" => $user->profile_id ? CPreferences::get($user->profile_id, true) : array(), "user" => $user->_id !== "" ? CPreferences::get($user->_id, true) : array()); // common sera toujours au debut $prefs = array("common" => array()); // Classement par module et par permission fonctionnelle CPreferences::loadModules(true); foreach (CPreferences::$modules as $modname => $prefnames) { $module = CModule::getActive($modname); $canRead = $module ? CPermModule::getPermModule($module->_id, PERM_READ, $user_id) : false; if ($modname == "common" || $user_id == "default" || $canRead) { $prefs[$modname] = array(); foreach ($prefnames as $prefname) { $prefs[$modname][$prefname] = array("default" => CMbArray::extract($prefvalues["default"], $prefname), "template" => CMbArray::extract($prefvalues["template"], $prefname), "user" => CMbArray::extract($prefvalues["user"], $prefname)); } } } // Warning: user clone necessary! // Some module index change $user global $user_clone = $user; // Chargement des modules $modules = CPermModule::getVisibleModules(); foreach ($modules as $module) { // Module might not be present @(include "./modules/{$module->mod_name}/index.php");
/** * get the permission module * * @param int $permType * * @return bool */ function getPerm($permType) { return CPermModule::getPermModule($this->mod_id, $permType); }