'NO-ACL' is more clear that we don't have an ACL for the given admin than three aster...
[mailer.git] / inc / libs / admins_functions.php
index 9739305..c1987fb 100644 (file)
@@ -41,18 +41,20 @@ if (!defined('__SECURITY')) {
 }
 
 // Check ACL for menu combination
-function adminsCheckAdminAcl ($action, $what) {
-       // If action is login or logout allow allways!
-       $default = 'allow';
+function isAdminsAllowedByAcl ($action, $what) {
+       // Get admin's id
+       $adminId = getCurrentAdminId();
+
        if (($action == 'login') || ($action == 'logout')) {
+               // If action is login or logout allow allways!
                return true;
-       } // END - if
-
-       // Default is deny
-       $ret = false;
+       } elseif (isset($GLOBALS[__FUNCTION__][$adminId][$action][$what])) {
+               // If we have cache, use it
+               return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
+       }
 
-       // Get admin's id
-       $adminId = getCurrentAdminId();
+       // But default result is failed
+       $GLOBALS[__FUNCTION__][$action][$what] = false;
 
        // Get admin's defult access right
        $default = getAdminDefaultAcl($adminId);
@@ -63,7 +65,7 @@ function adminsCheckAdminAcl ($action, $what) {
                $parent_action = getActionFromModuleWhat('admin', $what);
 
                // Check with this function...
-               $parent = adminsCheckAdminAcl($parent_action, '');
+               $parent = isAdminsAllowedByAcl($parent_action, '');
        } else {
                // Anything else is true!
                $parent = false;
@@ -81,7 +83,7 @@ function adminsCheckAdminAcl ($action, $what) {
                        $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
 
                        // Log debug message
-                       logDebugMessage(__FUNCTION__, __LINE__, 'action=' . $action . ',key=' . $key . ',acl_mode=' . $aclMode);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'action=' . $action . ',key=' . $key . ',acl_mode=' . $aclMode);
 
                        // Count cache hits
                        incrementStatsEntry('cache_hits');
@@ -93,13 +95,13 @@ function adminsCheckAdminAcl ($action, $what) {
                        $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
 
                        // Log debug message
-                       logDebugMessage(__FUNCTION__, __LINE__, 'what=' . $what . ',key=' . $key . ',acl_mode=' . $aclMode);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'what=' . $what . ',key=' . $key . ',acl_mode=' . $aclMode);
 
                        // Count cache hits
                        incrementStatsEntry('cache_hits');
                }
        } elseif (!isExtensionActive('cache')) {
-               // Old version, so load it from database
+               // Extension ext-cache is absent, so load it from database
                $result = false;
                if (!empty($action)) {
                        // Main menu
@@ -123,14 +125,14 @@ function adminsCheckAdminAcl ($action, $what) {
 
        // Check ACL and (maybe) allow
        //* DEBUG: */ debugOutput('default='.$default.',acl_mode='.$aclMode.',parent='.intval($parent));
-       if ((($default == 'allow') && ($aclMode != 'deny')) || (($default == 'deny') && ($aclMode == 'allow')) || ($parent === true) || (($default == '***') && ($aclMode == 'failed') && ($parent === false))) {
+       if ((($default == 'allow') && ($aclMode != 'deny')) || (($default == 'deny') && ($aclMode == 'allow')) || ($parent === true) || (($default == 'NO-ACL') && ($aclMode == 'failed') && ($parent === false))) {
                // Access is granted
-               $ret = true;
+               $GLOBALS[__FUNCTION__][$adminId][$action][$what] = true;
        } // END - if
 
        // Return value
        //* DEBUG: */ debugOutput(__FUNCTION__.'['.__LINE__.']:act='.$action.',wht='.$what.',default='.$default.',aclMode='.$aclMode);
-       return $ret;
+       return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
 }
 
 // Create email link to admins's account