protected checkAccessRecursive ( string | integer $user, string $itemName, array $params, |
||
$user | string | integer | 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]]. |
$itemName | string | the name of the operation that need access check |
$params | array | 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`. |
$assignments | the assignments to the specified user | |
리턴 | boolean | whether the operations can be performed by the user. |
protected function checkAccessRecursive($user, $itemName, $params, $assignments)
{
if (($item = $this->getItem($itemName)) === null) {
return false;
}
Yii::trace($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;
}
$query = new Query();
$parents = $query->select(['parent'])->from($this->itemChildTable)->where(['child' => $itemName])->column($this->db);
foreach ($parents as $parent) {
if ($this->checkAccessRecursive($user, $parent, $params, $assignments)) {
return true;
}
}
return false;
}
/** * @inheritdoc */ protected function checkAccessRecursive($user, $itemName, $params, $assignments) { $cacheKey = 'checkAccessRecursive:' . $user . ':' . $itemName; if (!empty($params)) { $cacheKey .= ':' . current($params)->primaryKey; } $cached = $this->getCache($cacheKey); if (empty($cached)) { $cached = parent::checkAccessRecursive($user, $itemName, $params, $assignments); $this->setCache($cacheKey, $cached); } return $cached; }