framework/rbac/PhpManager.php
protected function checkAccessRecursive($user, $itemName, $params, $assignments)
    {
        if (!isset($this->items[$itemName])) {
            return false;
        }

        /* @var $item Item */
        $item = $this->items[$itemName];
        Yii::debug($item instanceof Role ? "Checking role: $itemName" : "Checking permission : $itemName", __METHOD__);

        if (!$this->executeRule($user, $item, $params)) {
            return false;
        }

        if (isset($assignments[$itemName]) || in_array($itemName, $this->defaultRoles)) {
            return true;
        }

        foreach ($this->children as $parentName => $children) {
            if (isset($children[$itemName]) && $this->checkAccessRecursive($user, $parentName, $params, $assignments)) {
                return true;
            }
        }

        return false;
    }
protected function checkAccessRecursive($user, $itemName, $params, $assignments)
    {
        if (!isset($this->items[$itemName])) {
            return false;
        }

        /* @var $item Item */
        $item = $this->items[$itemName];
        Yii::debug($item instanceof Role ? "Checking role: $itemName" : "Checking permission : $itemName", __METHOD__);

        if (!$this->executeRule($user, $item, $params)) {
            return false;
        }

        if (isset($assignments[$itemName]) || in_array($itemName, $this->defaultRoles)) {
            return true;
        }

        foreach ($this->children as $parentName => $children) {
            if (isset($children[$itemName]) && $this->checkAccessRecursive($user, $parentName, $params, $assignments)) {
                return true;
            }
        }

        return false;
    }
protected function checkAccessRecursive ( $ user , $ itemName , $ params , $ assignments ) { if ( ! isset ( $ this -> items [ $ itemName ] ) ) { return false ; } /* @var $item Item */ $ item = $ this -> items [ $ itemName ] ; Yii :: debug ( $ item instanceof Role ? "Checking role: $itemName" : "Checking permission : $itemName" , __METHOD__ ) ; if ( ! $ this -> executeRule ( $ user , $ item , $ params ) ) { return false ; } if ( isset ( $ assignments [ $ itemName ] ) || in_array ( $ itemName , $ this -> defaultRoles ) ) { return true ; } foreach ( $ this -> children as $ parentName => $ children ) { if ( isset ( $ children [ $ itemName ] ) && $ this -> checkAccessRecursive ( $ user , $ parentName , $ params , $ assignments ) ) { return true ; } } return false ; }
Performs access check for the specified user.
This method is internally called by [[checkAccess()]].

@param string|int $user the user ID. This should can be either an integer or a string representing
the unique identifier of a user. See [[\yii\web\User::id]].
@param string $itemName the name of the operation that need access check
@param array $params name-value pairs that would be passed to rules associated
with the tasks and roles assigned to the user. A param with name 'user' is added to this array,
which holds the value of `$userId`.
@param Assignment[] $assignments the assignments to the specified user
@return bool whether the operations can be performed by the user.
Performs access check for the specified user . This method is internally called by [[ checkAccess () ]] .