X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FPermission.php;h=7d9cebd1d29305ed10fa6aa76b707eeef9b231b3;hb=37d5fc559ee587efb96bcf05721448c2c2e3cd57;hp=78a47d87f485d92b6fcd048aa92566c5c8616e07;hpb=1990e4917eb436d303075af6c420bd1eda4c68f8;p=civicrm-core.git diff --git a/CRM/Core/Permission.php b/CRM/Core/Permission.php index 78a47d87f4..7d9cebd1d2 100644 --- a/CRM/Core/Permission.php +++ b/CRM/Core/Permission.php @@ -81,17 +81,63 @@ class CRM_Core_Permission { } /** - * given a permission string, check for access requirements + * given a permission string or array, check for access requirements + * @param mixed $permissions the permission to check as an array or string -see examples + * arrays * - * @param string $str the permission to check + * Ex 1 + * + * Must have 'access CiviCRM' + * (string) 'access CiviCRM' + * + * + * Ex 2 Must have 'access CiviCRM' and 'access Ajax API' + * array('access CiviCRM', 'access Ajax API') + * + * Ex 3 Must have 'access CiviCRM' or 'access Ajax API' + * array( + * array('access CiviCRM', 'access Ajax API'), + * ), + * + * Ex 4 Must have 'access CiviCRM' or 'access Ajax API' AND 'access CiviEvent' + * array( + * array('access CiviCRM', 'access Ajax API'), + * 'access CiviEvent', + * ), + * + * Note that in permissions.php this is keyed by the action eg. + * (access Civi || access AJAX) && (access CiviEvent || access CiviContribute) + * 'myaction' => array( + * array('access CiviCRM', 'access Ajax API'), + * array('access CiviEvent', 'access CiviContribute') + * ), * * @return boolean true if yes, else false * @static * @access public */ - static function check($str) { - $config = CRM_Core_Config::singleton(); - return $config->userPermissionClass->check($str); + static function check($permissions) { + $permissions = (array) $permissions; + + foreach ($permissions as $permission) { + if(is_array($permission)) { + foreach ($permission as $orPerm) { + if(self::check($orPerm)) { + //one of our 'or' permissions has succeeded - stop checking this permission + return TRUE;; + } + } + //none of our our conditions was met + return FALSE; + } + else { + if(!CRM_Core_Config::singleton()->userPermissionClass->check($permission)) { + //one of our 'and' conditions has not been met + return FALSE; + } + } + } + return TRUE; } /** @@ -506,6 +552,7 @@ class CRM_Core_Permission { 'delete all manual batches' => $prefix . ts('delete all manual batches'), 'export own manual batches' => $prefix . ts('export own manual batches'), 'export all manual batches' => $prefix . ts('export all manual batches'), + 'administer payment processors' => $prefix . ts('administer payment processors'), ); return $permissions;