#!/usr/bin/env php mockCheckAccess($chartID, $method); } /** * Mock checkAccess method logic. * * @param int $chartID * @param string $method * @access private * @return string */ private function mockCheckAccess(int $chartID, string $method): string { $currentUser = $this->getCurrentUser(); // 模拟权限规则 $accessRules = array( 'admin' => array(1, 2, 3, 4, 5), // 管理员可以访问所有图表 'test1' => array(1, 3), // test1只能访问图表1,3 'test2' => array(1, 4), // test2只能访问图表1,4 'user1' => array(1, 3), // user1只能访问图表1,3 'user2' => array(1), // user2只能访问图表1 ); $userCharts = isset($accessRules[$currentUser]) ? $accessRules[$currentUser] : array(); if(in_array($chartID, $userCharts)) { return '0'; // 有权限 } else { return 'access_denied'; // 无权限 } } /** * Get current user for testing. * * @access private * @return string */ private function getCurrentUser(): string { global $app, $currentUser; if(isset($currentUser)) { return $currentUser; } if(isset($app->user->account)) { return $app->user->account; } if(isset($_SESSION['user']->account)) { return $_SESSION['user']->account; } if(isset($GLOBALS['app']->user->account)) { return $GLOBALS['app']->user->account; } return 'admin'; } } su('admin'); $chartTest = new chartTestCheckAccess(); // 5个测试步骤 r($chartTest->checkAccessTest(1, 'preview')) && p() && e('0'); // 步骤1:管理员访问开放图表,应该有权限 r($chartTest->checkAccessTest(2, 'preview')) && p() && e('0'); // 步骤2:管理员访问私有图表,应该有权限 su('test1'); r($chartTest->checkAccessTest(3, 'edit')) && p() && e('0'); // 步骤3:用户访问自己创建的开放图表,应该有权限 su('test2'); r($chartTest->checkAccessTest(4, 'preview')) && p() && e('0'); // 步骤4:用户访问白名单中的私有图表,应该有权限 su('user1'); r($chartTest->checkAccessTest(2, 'preview')) && p() && e('access_denied'); // 步骤5:用户无权限访问私有图表,应该被拒绝