CPhpAuthManager
| Пакет | system.web.auth |
|---|---|
| Наследование | class CPhpAuthManager » CAuthManager » CApplicationComponent » CComponent |
| Реализует | IAuthManager, IApplicationComponent |
| С | 1.0 |
| Исходный код | framework/web/auth/CPhpAuthManager.php |
Данные авторизации будут сохранены и загружены из файла, указанного параметром authFile, по умолчанию 'protected/data/auth.php'.
CPhpAuthManager подходит в основном для данных авторизации, которые не слишком велики (например, данные авторизации для системы личного блога). Для более сложных данных авторизации используйте CDbAuthManager.
Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| authFile | строка | путь к PHP-скрипту, содержащему данные авторизации. | CPhpAuthManager |
| authItems | массив | Возвращает элементы авторизации заданного типа и пользователя. | CPhpAuthManager |
| behaviors | массив | поведения, которые должны быть присоединены к этому компоненту. | CApplicationComponent |
| defaultRoles | массив | список имен ролей, которые неявно назначаются всем пользователям. | CAuthManager |
| isInitialized | логическое | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| operations | массив | Возвращает операции. | CAuthManager |
| roles | массив | Возвращает роли. | CAuthManager |
| showErrors | логическое | Включить вывод сообщений об ошибках для правил bizRules. | CAuthManager |
| tasks | массив | Возвращает задачи. | CAuthManager |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства нулевым. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| addItemChild() | Добавляет элемент в качестве дочернего для другого элемента. | CPhpAuthManager |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| assign() | Присваивает элемент авторизации пользователю. | CPhpAuthManager |
| attachBehavior() | Присоединяет поведение к данному компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик события к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| checkAccess() | Производит проверку доступа для указанного пользователя. | CPhpAuthManager |
| clearAll() | Удаляет все данные авторизации. | CPhpAuthManager |
| clearAuthAssignments() | Удаляет все назначения авторизации. | CPhpAuthManager |
| createAuthItem() | Создает элемент авторизации. | CPhpAuthManager |
| createOperation() | Создает операцию. | CAuthManager |
| createRole() | Создает роль. | CAuthManager |
| createTask() | Создает задачу. | CAuthManager |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующего обработчика события. | CComponent |
| disableBehavior() | Отключает присоединенное поведение. | CComponent |
| disableBehaviors() | Отключает все присоединенные поведения к этому компоненту. | CComponent |
| enableBehavior() | Включает присоединенное поведение. | CComponent |
| enableBehaviors() | Включает все присоединенные поведения к данному компоненту. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| executeBizRule() | Выполняет указанное бизнес-правило. | CAuthManager |
| getAuthAssignment() | Возвращает информацию об назначении элемента. | CPhpAuthManager |
| getAuthAssignments() | Возвращает назначения элементов авторизации для указанного пользователя. | CPhpAuthManager |
| getAuthItem() | Возвращает элемент авторизации с указанным именем. | CPhpAuthManager |
| getAuthItems() | Возвращает элементы авторизации определенного типа и пользователя. | CPhpAuthManager |
| getEventHandlers() | Возвращает список присоединенных обработчиков событий для события. | CComponent |
| getIsInitialized() | Проверяет, был ли инициирован этот компонент приложения. | CApplicationComponent |
| getItemChildren() | Возвращает дочерние элементы указанного элемента. | CPhpAuthManager |
| getOperations() | Возвращает операции. | CAuthManager |
| getRoles() | Возвращает роли. | CAuthManager |
| getTasks() | Возвращает задачи. | CAuthManager |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли присоединенные обработчики для указанного события. | CComponent |
| hasItemChild() | Возвращает значение, указывающее, существует ли дочерний элемент в родительском элементе. | CPhpAuthManager |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует компонент приложения. | CPhpAuthManager |
| isAssigned() | Возвращает значение, указывающее, был ли элемент назначен пользователю. | CPhpAuthManager |
| load() | Загружает данные авторизации. | CPhpAuthManager |
| raiseEvent() | Возбуждает событие. | CComponent |
| removeAuthItem() | Удаляет указанный элемент авторизации. | CPhpAuthManager |
| removeItemChild() | Удаляет дочерний элемент из его родителя. | CPhpAuthManager |
| revoke() | Отменяет назначение авторизации для пользователя. | CPhpAuthManager |
| save() | Сохраняет данные авторизации в постоянное хранилище. | CPhpAuthManager |
| saveAuthAssignment() | Сохраняет изменения в назначении авторизации. | CPhpAuthManager |
| saveAuthItem() | Сохраняет элемент авторизации в постоянном хранилище. | CPhpAuthManager |
Защищенные методы
| Метод | Описание | Определено в |
|---|---|---|
| checkItemChildType() | Проверяет типы элементов, чтобы убедиться, что дочерний элемент может быть добавлен к родителю. | CAuthManager |
| detectLoop() | Проверяет наличие цикла в иерархии элементов авторизации. | CPhpAuthManager |
| loadFromFile() | Загружает данные авторизации из файла скрипта PHP. | CPhpAuthManager |
| saveToFile() | Сохраняет данные авторизации в файл скрипта PHP. | CPhpAuthManager |
Подробное описание свойств
authFile свойство
public string $authFile;
путь к PHP-скрипту, содержащему данные авторизации. Если не задан, используется файл 'protected/data/auth.php'. Убедитесь, что этот файл доступен для записи процессом веб-сервера, если данные авторизации необходимо изменить.
См. также
authItems свойство только для чтения
public array getAuthItems(integer $type=NULL, mixed $userId=NULL)
Возвращает элементы авторизации определенного типа и пользователя.
Подробное описание методов
addItemChild() метод
public boolean addItemChild(string $itemName, string $childName) | ||
| $itemName | string | имя родительского элемента |
| $childName | string | имя дочернего элемента |
| {return} | boolean | успешность добавления элемента |
public function addItemChild($itemName,$childName)
{
if(!isset($this->_items[$childName],$this->_items[$itemName]))
throw new CException(Yii::t('yii','Either "{parent}" or "{child}" does not exist.',array('{child}'=>$childName,'{parent}'=>$itemName)));
$child=$this->_items[$childName];
$item=$this->_items[$itemName];
$this->checkItemChildType($item->getType(),$child->getType());
if($this->detectLoop($itemName,$childName))
throw new CException(Yii::t('yii','Cannot add "{child}" as a child of "{parent}". A loop has been detected.',
array('{child}'=>$childName,'{parent}'=>$itemName)));
if(isset($this->_children[$itemName][$childName]))
throw new CException(Yii::t('yii','The item "{parent}" already has a child "{child}".',
array('{child}'=>$childName,'{parent}'=>$itemName)));
$this->_children[$itemName][$childName]=$this->_items[$childName];
return true;
}
Добавляет элемент в качестве дочернего к другому элементу.
assign() метод
public CAuthAssignment assign(string $itemName, mixed $userId, string $bizRule=NULL, mixed $data=NULL) | ||
| $itemName | string | имя элемента |
| $userId | mixed | ИД пользователя (см. IWebUser::getId) |
| $bizRule | string | правило бизнес-логики, которое выполняется при вызове checkAccess для данного элемента авторизации. |
| $data | mixed | дополнительные данные, связанные с этим назначением |
| {return} | CAuthAssignment | информация о назначении авторизации. |
public function assign($itemName,$userId,$bizRule=null,$data=null)
{
if(!isset($this->_items[$itemName]))
throw new CException(Yii::t('yii','Unknown authorization item "{name}".',array('{name}'=>$itemName)));
elseif(isset($this->_assignments[$userId][$itemName]))
throw new CException(Yii::t('yii','Authorization item "{item}" has already been assigned to user "{user}".',
array('{item}'=>$itemName,'{user}'=>$userId)));
else
return $this->_assignments[$userId][$itemName]=new CAuthAssignment($this,$itemName,$userId,$bizRule,$data);
}
Назначает элемент авторизации пользователю.
checkAccess() метод
public boolean checkAccess(string $itemName, mixed $userId, array $params=array ( )) | ||
| $itemName | string | имя операции, для которой требуется проверка доступа |
| $userId | mixed | ИД пользователя. Может быть целым числом или строкой, представляющей уникальный идентификатор пользователя. См. IWebUser::getId. |
| $params | array | параметры в формате имя-значение, которые будут переданы правилам бизнес-логики, связанным с задачами и ролями, назначенными пользователю. С версии 1.1.11 в этот массив добавлен параметр с именем 'userId', содержащий значение $userId. |
| {return} | boolean | возможность выполнения операции пользователем. |
public function checkAccess($itemName,$userId,$params=array())
{
if(!isset($this->_items[$itemName]))
return false;
$item=$this->_items[$itemName];
Yii::trace('Checking permission "'.$item->getName().'"','system.web.auth.CPhpAuthManager');
if(!isset($params['userId']))
$params['userId'] = $userId;
if($this->executeBizRule($item->getBizRule(),$params,$item->getData()))
{
if(in_array($itemName,$this->defaultRoles))
return true;
if(isset($this->_assignments[$userId][$itemName]))
{
$assignment=$this->_assignments[$userId][$itemName];
if($this->executeBizRule($assignment->getBizRule(),$params,$assignment->getData()))
return true;
}
foreach($this->_children as $parentName=>$children)
{
if(isset($children[$itemName]) && $this->checkAccess($parentName,$userId,$params))
return true;
}
}
return false;
}
Проверяет доступ для указанного пользователя.
clearAll() метод
public void clearAll() |
public function clearAll()
{
$this->clearAuthAssignments();
$this->_children=array();
$this->_items=array();
}
Удаляет все данные авторизации.
clearAuthAssignments() метод
public void clearAuthAssignments() |
public function clearAuthAssignments()
{
$this->_assignments=array();
}
Удаляет все назначения авторизации.
createAuthItem() метод
public CAuthItem createAuthItem(string $name, integer $type, string $description='', string $bizRule=NULL, mixed $data=NULL) | ||
| $name | string | имя элемента. Должно быть уникальным идентификатором. |
| $type | integer | тип элемента (0: операция, 1: задача, 2: роль). |
| $description | string | описание элемента |
| $bizRule | string | правило бизнес-логики, связанное с элементом. Это фрагмент PHP-кода, который будет выполнен при вызове checkAccess для элемента. |
| $data | mixed | дополнительные данные, связанные с элементом. |
| {return} | CAuthItem | элемент авторизации |
public function createAuthItem($name,$type,$description='',$bizRule=null,$data=null)
{
if(isset($this->_items[$name]))
throw new CException(Yii::t('yii','Unable to add an item whose name is the same as an existing item.'));
return $this->_items[$name]=new CAuthItem($this,$name,$type,$description,$bizRule,$data);
}
Создает элемент авторизации. Элемент авторизации представляет разрешение на действие (например, создание поста). Имеет три типа: операция, задача и роль. Элементы авторизации образуют иерархию. Элементы на более высоких уровнях наследуют разрешения, представленные элементами на более низких уровнях.
detectLoop() метод
protected boolean detectLoop(string $itemName, string $childName) | ||
| $itemName | string | имя родительского элемента |
| $childName | string | имя дочернего элемента, который добавляется в иерархию |
| {return} | boolean | существует ли цикл |
protected function detectLoop($itemName,$childName)
{
if($childName===$itemName)
return true;
if(!isset($this->_children[$childName], $this->_items[$itemName]))
return false;
foreach($this->_children[$childName] as $child)
{
if($this->detectLoop($itemName,$child->getName()))
return true;
}
return false;
}
Проверяет, существует ли цикл в иерархии элементов авторизации.
getAuthAssignment() метод
public CAuthAssignment getAuthAssignment(string $itemName, mixed $userId) | ||
| $itemName | string | имя элемента |
| $userId | mixed | ИД пользователя (см. IWebUser::getId) |
| {return} | CAuthAssignment | информация о назначении элемента. Возвращает Null, если элемент не назначен пользователю. |
public function getAuthAssignment($itemName,$userId)
{
return isset($this->_assignments[$userId][$itemName])?$this->_assignments[$userId][$itemName]:null;
}
Возвращает информацию о назначении элемента.
getAuthAssignments() метод
public array getAuthAssignments(mixed $userId) | ||
| $userId | mixed | ИД пользователя (см. IWebUser::getId) |
| {return} | array | информация о назначениях элементов для пользователя. Возвращает пустой массив, если пользователю не назначены элементы. |
public function getAuthAssignments($userId)
{
return isset($this->_assignments[$userId])?$this->_assignments[$userId]:array();
}
Возвращает назначения элементов для указанного пользователя.
getAuthItem() метод
public CAuthItem getAuthItem(string $name) | ||
| $name | string | имя элемента |
| {return} | CAuthItem | элемент авторизации. Возвращает Null, если элемент не найден. |
public function getAuthItem($name)
{
return isset($this->_items[$name])?$this->_items[$name]:null;
}
Возвращает элемент авторизации с указанным именем.
getAuthItems() метод
public array getAuthItems(integer $type=NULL, mixed $userId=NULL) | ||
| $type | integer | тип элемента (0: операция, 1: задача, 2: роль). По умолчанию null, что означает возврат всех элементов независимо от типа. |
| $userId | mixed | ID пользователя. По умолчанию null, что означает возврат всех элементов, даже если они не назначены пользователю. |
| {return} | array | элементы авторизации указанного типа. |
public function getAuthItems($type=null,$userId=null)
{
if($type===null && $userId===null)
return $this->_items;
$items=array();
if($userId===null)
{
foreach($this->_items as $name=>$item)
{
if($item->getType()==$type)
$items[$name]=$item;
}
}
elseif(isset($this->_assignments[$userId]))
{
foreach($this->_assignments[$userId] as $assignment)
{
$name=$assignment->getItemName();
if(isset($this->_items[$name]) && ($type===null || $this->_items[$name]->getType()==$type))
$items[$name]=$this->_items[$name];
}
}
return $items;
}
Возвращает элементы авторизации указанного типа и пользователя.
getItemChildren() метод
public array getItemChildren(mixed $names) | ||
| $names | mixed | имя родительского элемента. Может быть строкой или массивом. Массив представляет список имён элементов. |
| {return} | array | все дочерние элементы родительского |
public function getItemChildren($names)
{
if(is_string($names))
return isset($this->_children[$names]) ? $this->_children[$names] : array();
$children=array();
foreach($names as $name)
{
if(isset($this->_children[$name]))
$children=array_merge($children,$this->_children[$name]);
}
return $children;
}
Возвращает дочерние элементы указанного элемента.
hasItemChild() метод
public boolean hasItemChild(string $itemName, string $childName) | ||
| $itemName | string | имя родительского элемента |
| $childName | string | имя дочернего элемента |
| {return} | boolean | существует ли дочерний элемент |
public function hasItemChild($itemName,$childName)
{
return isset($this->_children[$itemName][$childName]);
}
Возвращает значение, указывающее на наличие дочернего элемента внутри родительского.
init() метод
public void init() |
public function init()
{
parent::init();
if($this->authFile===null)
$this->authFile=Yii::getPathOfAlias('application.data.auth').'.php';
$this->load();
}
Инициализирует компонент приложения. Этот метод переопределяет реализацию родительского класса, загружая данные авторизации из PHP-скрипта.
isAssigned() метод
public boolean isAssigned(string $itemName, mixed $userId) | ||
| $itemName | string | имя элемента |
| $userId | mixed | ID пользователя (см. IWebUser::getId) |
| {return} | boolean | элемент назначен пользователю. |
public function isAssigned($itemName,$userId)
{
return isset($this->_assignments[$userId][$itemName]);
}
Возвращает значение, указывающее, назначен ли элемент пользователю.
load() метод
public void load() |
public function load()
{
$this->clearAll();
$items=$this->loadFromFile($this->authFile);
foreach($items as $name=>$item)
$this->_items[$name]=new CAuthItem($this,$name,$item['type'],$item['description'],$item['bizRule'],$item['data']);
foreach($items as $name=>$item)
{
if(isset($item['children']))
{
foreach($item['children'] as $childName)
{
if(isset($this->_items[$childName]))
$this->_children[$name][$childName]=$this->_items[$childName];
}
}
if(isset($item['assignments']))
{
foreach($item['assignments'] as $userId=>$assignment)
{
$this->_assignments[$userId][$name]=new CAuthAssignment($this,$name,$userId,$assignment['bizRule'],$assignment['data']);
}
}
}
}
Загружает данные авторизации.
loadFromFile() метод
protected array loadFromFile(string $file) | ||
| $file | string | путь к файлу. |
| {return} | array | данные авторизации |
protected function loadFromFile($file)
{
if(is_file($file))
return require($file);
else
return array();
}
Загружает данные авторизации из PHP-скрипта.
См. также
removeAuthItem() метод
public boolean removeAuthItem(string $name) | ||
| $name | string | имя элемента, который нужно удалить |
| {return} | boolean | существует ли элемент в хранилище и был ли он удален |
public function removeAuthItem($name)
{
if(isset($this->_items[$name]))
{
foreach($this->_children as &$children)
unset($children[$name]);
foreach($this->_assignments as &$assignments)
unset($assignments[$name]);
unset($this->_items[$name]);
return true;
}
else
return false;
}
Удаляет указанный элемент авторизации.
removeItemChild() метод
public boolean removeItemChild(string $itemName, string $childName) | ||
| $itemName | string | имя родительского элемента |
| $childName | string | имя дочернего элемента |
| {return} | boolean | успешно ли выполнено удаление |
public function removeItemChild($itemName,$childName)
{
if(isset($this->_children[$itemName][$childName]))
{
unset($this->_children[$itemName][$childName]);
return true;
}
else
return false;
}
Удаляет дочерний элемент из его родителя. Примечание, дочерний элемент не удаляется. Удаляется только родительско-дочернее отношение.
revoke() метод
public boolean revoke(string $itemName, mixed $userId) | ||
| $itemName | string | имя элемента |
| $userId | mixed | ID пользователя (см. IWebUser::getId) |
| {return} | boolean | успешно ли выполнено удаление |
public function revoke($itemName,$userId)
{
if(isset($this->_assignments[$userId][$itemName]))
{
unset($this->_assignments[$userId][$itemName]);
return true;
}
else
return false;
}
Отменяет назначение авторизации от пользователя.
save() метод
public void save() |
public function save()
{
$items=array();
foreach($this->_items as $name=>$item)
{
$items[$name]=array(
'type'=>$item->getType(),
'description'=>$item->getDescription(),
'bizRule'=>$item->getBizRule(),
'data'=>$item->getData(),
);
if(isset($this->_children[$name]))
{
foreach($this->_children[$name] as $child)
$items[$name]['children'][]=$child->getName();
}
}
foreach($this->_assignments as $userId=>$assignments)
{
foreach($assignments as $name=>$assignment)
{
if(isset($items[$name]))
{
$items[$name]['assignments'][$userId]=array(
'bizRule'=>$assignment->getBizRule(),
'data'=>$assignment->getData(),
);
}
}
}
$this->saveToFile($items,$this->authFile);
}
Сохраняет данные авторизации в постоянном хранилище. Если внесены изменения в данные авторизации, убедитесь, что вы вызываете этот метод для сохранения изменённых данных в постоянное хранилище.
saveAuthAssignment() метод
public void saveAuthAssignment(CAuthAssignment $assignment) | ||
| $assignment | CAuthAssignment | назначение, которое было изменено. |
public function saveAuthAssignment($assignment)
{
}
Сохраняет изменения в назначении авторизации.
saveAuthItem() метод
public void saveAuthItem(CAuthItem $item, string $oldName=NULL) | ||
| $item | CAuthItem | элемент, который нужно сохранить. |
| $oldName | string | прежнее имя элемента. Если null, значит имя элемента не изменено. |
public function saveAuthItem($item,$oldName=null)
{
if($oldName!==null && ($newName=$item->getName())!==$oldName) // name changed
{
if(isset($this->_items[$newName]))
throw new CException(Yii::t('yii','Unable to change the item name. The name "{name}" is already used by another item.',array('{name}'=>$newName)));
if(isset($this->_items[$oldName]) && $this->_items[$oldName]===$item)
{
unset($this->_items[$oldName]);
$this->_items[$newName]=$item;
if(isset($this->_children[$oldName]))
{
$this->_children[$newName]=$this->_children[$oldName];
unset($this->_children[$oldName]);
}
foreach($this->_children as &$children)
{
if(isset($children[$oldName]))
{
$children[$newName]=$children[$oldName];
unset($children[$oldName]);
}
}
foreach($this->_assignments as &$assignments)
{
if(isset($assignments[$oldName]))
{
$assignments[$newName]=$assignments[$oldName];
unset($assignments[$oldName]);
}
}
}
}
}
Сохраняет элемент авторизации в постоянное хранилище.
saveToFile() метод
protected void saveToFile(array $data, string $file) | ||
| $data | array | данные авторизации |
| $file | string | путь к файлу. |
protected function saveToFile($data,$file)
{
file_put_contents($file,"<?php\nreturn ".var_export($data,true).";\n");
}
Сохраняет данные авторизации в файл PHP-скрипта.
См. также
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CPhpAuthManager