278 lines
7.4 KiB
PHP
278 lines
7.4 KiB
PHP
<?php
|
|
/**
|
|
* CAuthItem class file.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @link http://www.yiiframework.com/
|
|
* @copyright 2008-2013 Yii Software LLC
|
|
* @license http://www.yiiframework.com/license/
|
|
*/
|
|
|
|
/**
|
|
* CAuthItem represents an authorization item.
|
|
* An authorization item can be an operation, a task or a role.
|
|
* They form an authorization hierarchy. Items on higher levels of the hierarchy
|
|
* inherit the permissions represented by items on lower levels.
|
|
* A user may be assigned one or several authorization items (called {@link CAuthAssignment assignments}.
|
|
* He can perform an operation only when it is among his assigned items.
|
|
*
|
|
* @property IAuthManager $authManager The authorization manager.
|
|
* @property integer $type The authorization item type. This could be 0 (operation), 1 (task) or 2 (role).
|
|
* @property string $name The item name.
|
|
* @property string $description The item description.
|
|
* @property string $bizRule The business rule associated with this item.
|
|
* @property mixed $data The additional data associated with this item.
|
|
* @property array $children All child items of this item.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @package system.web.auth
|
|
* @since 1.0
|
|
*/
|
|
class CAuthItem extends CComponent
|
|
{
|
|
const TYPE_OPERATION=0;
|
|
const TYPE_TASK=1;
|
|
const TYPE_ROLE=2;
|
|
|
|
private $_auth;
|
|
private $_type;
|
|
private $_name;
|
|
private $_description;
|
|
private $_bizRule;
|
|
private $_data;
|
|
|
|
/**
|
|
* Constructor.
|
|
* @param IAuthManager $auth authorization manager
|
|
* @param string $name authorization item name
|
|
* @param integer $type authorization item type. This can be 0 (operation), 1 (task) or 2 (role).
|
|
* @param string $description the description
|
|
* @param string $bizRule the business rule associated with this item
|
|
* @param mixed $data additional data for this item
|
|
*/
|
|
public function __construct($auth,$name,$type,$description='',$bizRule=null,$data=null)
|
|
{
|
|
$this->_type=(int)$type;
|
|
$this->_auth=$auth;
|
|
$this->_name=$name;
|
|
$this->_description=$description;
|
|
$this->_bizRule=$bizRule;
|
|
$this->_data=$data;
|
|
}
|
|
|
|
/**
|
|
* Checks to see if the specified item is within the hierarchy starting from this item.
|
|
* This method is expected to be internally used by the actual implementations
|
|
* of the {@link IAuthManager::checkAccess}.
|
|
* @param string $itemName the name of the item to be checked
|
|
* @param array $params the parameters to be passed to business rule evaluation
|
|
* @return boolean whether the specified item is within the hierarchy starting from this item.
|
|
*/
|
|
public function checkAccess($itemName,$params=array())
|
|
{
|
|
Yii::trace('Checking permission "'.$this->_name.'"','system.web.auth.CAuthItem');
|
|
if($this->_auth->executeBizRule($this->_bizRule,$params,$this->_data))
|
|
{
|
|
if($this->_name==$itemName)
|
|
return true;
|
|
foreach($this->_auth->getItemChildren($this->_name) as $item)
|
|
{
|
|
if($item->checkAccess($itemName,$params))
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @return IAuthManager the authorization manager
|
|
*/
|
|
public function getAuthManager()
|
|
{
|
|
return $this->_auth;
|
|
}
|
|
|
|
/**
|
|
* @return integer the authorization item type. This could be 0 (operation), 1 (task) or 2 (role).
|
|
*/
|
|
public function getType()
|
|
{
|
|
return $this->_type;
|
|
}
|
|
|
|
/**
|
|
* @return string the item name
|
|
*/
|
|
public function getName()
|
|
{
|
|
return $this->_name;
|
|
}
|
|
|
|
/**
|
|
* @param string $value the item name
|
|
*/
|
|
public function setName($value)
|
|
{
|
|
if($this->_name!==$value)
|
|
{
|
|
$oldName=$this->_name;
|
|
$this->_name=$value;
|
|
$this->_auth->saveAuthItem($this,$oldName);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string the item description
|
|
*/
|
|
public function getDescription()
|
|
{
|
|
return $this->_description;
|
|
}
|
|
|
|
/**
|
|
* @param string $value the item description
|
|
*/
|
|
public function setDescription($value)
|
|
{
|
|
if($this->_description!==$value)
|
|
{
|
|
$this->_description=$value;
|
|
$this->_auth->saveAuthItem($this);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string the business rule associated with this item
|
|
*/
|
|
public function getBizRule()
|
|
{
|
|
return $this->_bizRule;
|
|
}
|
|
|
|
/**
|
|
* @param string $value the business rule associated with this item
|
|
*/
|
|
public function setBizRule($value)
|
|
{
|
|
if($this->_bizRule!==$value)
|
|
{
|
|
$this->_bizRule=$value;
|
|
$this->_auth->saveAuthItem($this);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return mixed the additional data associated with this item
|
|
*/
|
|
public function getData()
|
|
{
|
|
return $this->_data;
|
|
}
|
|
|
|
/**
|
|
* @param mixed $value the additional data associated with this item
|
|
*/
|
|
public function setData($value)
|
|
{
|
|
if($this->_data!==$value)
|
|
{
|
|
$this->_data=$value;
|
|
$this->_auth->saveAuthItem($this);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Adds a child item.
|
|
* @param string $name the name of the child item
|
|
* @return boolean whether the item is added successfully
|
|
* @throws CException if either parent or child doesn't exist or if a loop has been detected.
|
|
* @see IAuthManager::addItemChild
|
|
*/
|
|
public function addChild($name)
|
|
{
|
|
return $this->_auth->addItemChild($this->_name,$name);
|
|
}
|
|
|
|
/**
|
|
* Removes a child item.
|
|
* Note, the child item is not deleted. Only the parent-child relationship is removed.
|
|
* @param string $name the child item name
|
|
* @return boolean whether the removal is successful
|
|
* @see IAuthManager::removeItemChild
|
|
*/
|
|
public function removeChild($name)
|
|
{
|
|
return $this->_auth->removeItemChild($this->_name,$name);
|
|
}
|
|
|
|
/**
|
|
* Returns a value indicating whether a child exists
|
|
* @param string $name the child item name
|
|
* @return boolean whether the child exists
|
|
* @see IAuthManager::hasItemChild
|
|
*/
|
|
public function hasChild($name)
|
|
{
|
|
return $this->_auth->hasItemChild($this->_name,$name);
|
|
}
|
|
|
|
/**
|
|
* Returns the children of this item.
|
|
* @return array all child items of this item.
|
|
* @see IAuthManager::getItemChildren
|
|
*/
|
|
public function getChildren()
|
|
{
|
|
return $this->_auth->getItemChildren($this->_name);
|
|
}
|
|
|
|
/**
|
|
* Assigns this item to a user.
|
|
* @param mixed $userId the user ID (see {@link IWebUser::getId})
|
|
* @param string $bizRule the business rule to be executed when {@link checkAccess} is called
|
|
* for this particular authorization item.
|
|
* @param mixed $data additional data associated with this assignment
|
|
* @return CAuthAssignment the authorization assignment information.
|
|
* @throws CException if the item has already been assigned to the user
|
|
* @see IAuthManager::assign
|
|
*/
|
|
public function assign($userId,$bizRule=null,$data=null)
|
|
{
|
|
return $this->_auth->assign($this->_name,$userId,$bizRule,$data);
|
|
}
|
|
|
|
/**
|
|
* Revokes an authorization assignment from a user.
|
|
* @param mixed $userId the user ID (see {@link IWebUser::getId})
|
|
* @return boolean whether removal is successful
|
|
* @see IAuthManager::revoke
|
|
*/
|
|
public function revoke($userId)
|
|
{
|
|
return $this->_auth->revoke($this->_name,$userId);
|
|
}
|
|
|
|
/**
|
|
* Returns a value indicating whether this item has been assigned to the user.
|
|
* @param mixed $userId the user ID (see {@link IWebUser::getId})
|
|
* @return boolean whether the item has been assigned to the user.
|
|
* @see IAuthManager::isAssigned
|
|
*/
|
|
public function isAssigned($userId)
|
|
{
|
|
return $this->_auth->isAssigned($this->_name,$userId);
|
|
}
|
|
|
|
/**
|
|
* Returns the item assignment information.
|
|
* @param mixed $userId the user ID (see {@link IWebUser::getId})
|
|
* @return CAuthAssignment the item assignment information. Null is returned if
|
|
* this item is not assigned to the user.
|
|
* @see IAuthManager::getAuthAssignment
|
|
*/
|
|
public function getAssignment($userId)
|
|
{
|
|
return $this->_auth->getAuthAssignment($this->_name,$userId);
|
|
}
|
|
}
|