private static function MODELS_runFilter() { $fullAccess = false; if (count(self::$userGrantedNumber) > 0) { //Il y a au moins 1 règle donnant un accès for ($i = 0; $i < self::$userGrantedNumber; $i++) { //On regarde d'abord si l'une de ses règles donne un accès complet if (is_null(self::$userGrantedList[$i]["MODELNAME"])) { //Détection d'une règle donnant un accès complet $fullAccess = true; } else { //Détection d'une règle particulière //Récupère la catégorie du modèle $tables = array(cTABLEMODELS, cTABLEMODELSCATEGORIES, cTABLECONSTRAINT, cTABLEVIEWPREFERENCE, cTABLEWORKSPACE); $conditions = array("NAME" => self::$userGrantedList[$i]["MODELNAME"], "document_models.WORKSPACES" => "document_workspace.ID", "document_models.VIEWPREFERENCES" => "document_viewpreference.ID", "document_models.CONSTRAINTS" => "document_constraint.ID", "document_models.CATEGORIES" => "document_categories.ID"); $modelDatas = \application\resonance2\application::SQLPDO_getItemsWhereProprietiesEquals($tables, "*", $conditions); //echo "<pre>" . print_r ( $modelDatas, 1 ) . "</pre>"; $modelCategoryName = \application\resonance2\application::SQLPDO_getItemsWhereProprietiesEquals(cTABLEMODELSCATEGORIES, "CATEGORY", array("ID" => $modelDatas[0]["CATEGORIES"])); $modelCategoryName = $modelCategoryName[0]["CATEGORY"]; self::$userTable[$modelCategoryName] = array($modelDatas[0]); } } if ($fullAccess === true) { //Il y a au moins une règle qui donne un accès totale, l'utilisateur à accès à tout //On efface les éventuelles règles particulières donnant l'accès self::$userTable = null; //On donne l'accès complet self::$userTable = self::$modelsList; } else { //Aucune règle ne donne un accès totale, le tableau self::$userTable à été remplit précédement au fur et à mesure du scannage des règles if (self::$userDeniedNumber > 0) { //Au moins une règle restreint les accès pour cet utilisateur //On repart du tableau précédent pour retirer le ou les modèle(s) restreint(s) //Pour chaque RESTRICTION for ($i = 0; $i < self::$userDeniedNumber; $i++) { //La taille du tableau des autorisations doit être rafraîchit à chaque boucle pour ne pas avoir d'erreur durant la phase de suppression //Pour chaque CATEGORIE if (!is_null(self::$userTable)) { $userGrantedListCategoryNumber = count(array_unique(self::$userTable, SORT_REGULAR)); for ($j = 0; $j < $userGrantedListCategoryNumber; $j++) { //Nom de la catégorie en cours de filtrage $currentCategory = array_keys(self::$userTable); $currentCategory = $currentCategory[$j]; //Pour chaque MODELE if (!is_null(self::$userTable[$currentCategory])) { $userGrantedListModelNumber = count(array_unique(self::$userTable[$currentCategory], SORT_REGULAR)); for ($k = 0; $k < $userGrantedListModelNumber; $k++) { if (self::$userTable[$currentCategory][$k]['NAME'] === self::$userDeniedList[$i]["MODELNAME"]) { //Une restriction à été trouvée, l'élément est supprimé du tableau userGrantedList unset(self::$userTable[$currentCategory][$k]); //Réinitialise à 0 les variables J et K à chaque fois qu'un élément est supprimé pour être sûr de bien passer sur tous les éléments du tableau $j = $k = 0; //Réinitialise les numéros de clés des tableaux à l'intérieur des catégories self::$userTable[$currentCategory] = array_merge(self::$userTable[$currentCategory]); //Recalcul le nombre de modèle dans chaque catégorie $userGrantedListModelNumber = count(array_unique(self::$userTable[$currentCategory])); if ($userGrantedListModelNumber === 0 || is_null(self::$userTable[$currentCategory])) { break; //Stop la boucle si la catégorie est vide } } } } //Recalcul le nombre de de catégorie $userGrantedListCategoryNumber = count(array_unique(self::$userTable, SORT_REGULAR)); if ($userGrantedListCategoryNumber === 0 || is_null(self::$userTable)) { break; //Stop la boucle si la catégorie est vide } } } } } } } else { if (self::$userDeniedNumber > 0) { //Il n'y a aucune règle qui donne droit à l'accès d'un modèle, par contre il y a au moins une règle qui interdit un ou plusieurs accès } else { //Aucune règle n'a été définit pour cet utilisateur du groupe self::$userTable = array(); } } return self::$userTable; }
protected static function USERS_getUserVIPAccess() { $userVIPAccess = \application\resonance2\application::SQLPDO_getItemsWhereProprietiesEquals(cTABLEHIERARCHY, "switchVIPACCESS", array("TYPE" => self::USERS_getUserHierarchy())); $userVIPAccess = $userVIPAccess[0]['switchVIPACCESS']; return $userVIPAccess; }