Acl\Adapter\IniAcl::check PHP 메소드

check() 공개 메소드

Main ACL check function. Checks to see if the ARO (access request object) has access to the ACO (access control object).Looks at the acl.ini file for permissions (see instructions in /config/acl.ini).
public check ( string $aro, string $aco, string $action = null ) : boolean
$aro string ARO
$aco string ACO
$action string Action
리턴 boolean Success
    public function check($aro, $aco, $action = null)
    {
        $aclConfig = $this->options;
        if (is_array($aro)) {
            $aro = Hash::get($aro, $this->userPath);
        }
        if (isset($aclConfig[$aro]['deny'])) {
            $userDenies = $this->arrayTrim(explode(",", $aclConfig[$aro]['deny']));
            if (array_search($aco, $userDenies)) {
                return false;
            }
        }
        if (isset($aclConfig[$aro]['allow'])) {
            $userAllows = $this->arrayTrim(explode(",", $aclConfig[$aro]['allow']));
            if (array_search($aco, $userAllows)) {
                return true;
            }
        }
        if (isset($aclConfig[$aro]['groups'])) {
            $userGroups = $this->arrayTrim(explode(",", $aclConfig[$aro]['groups']));
            foreach ($userGroups as $group) {
                if (array_key_exists($group, $aclConfig)) {
                    if (isset($aclConfig[$group]['deny'])) {
                        $groupDenies = $this->arrayTrim(explode(",", $aclConfig[$group]['deny']));
                        if (array_search($aco, $groupDenies)) {
                            return false;
                        }
                    }
                    if (isset($aclConfig[$group]['allow'])) {
                        $groupAllows = $this->arrayTrim(explode(",", $aclConfig[$group]['allow']));
                        if (array_search($aco, $groupAllows)) {
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

Usage Example

예제 #1
0
파일: IniAclTest.php 프로젝트: ceeram/acl
 /**
  * check should accept a user array.
  *
  * @return void
  */
 public function testCheckArray()
 {
     $iniFile = TEST_APP . 'TestApp/Config/acl.ini.php';
     $Ini = new IniAcl();
     $Ini->config = $Ini->readConfigFile($iniFile);
     $Ini->userPath = 'User.username';
     $user = array('User' => array('username' => 'admin'));
     $this->assertTrue($Ini->check($user, 'posts'));
 }