Acl\Adapter\IniAcl::check PHP Method

check() public method

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
return 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

Example #1
0
 /**
  * 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'));
 }