You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							204 lines
						
					
					
						
							5.6 KiB
						
					
					
				
			
		
		
	
	
							204 lines
						
					
					
						
							5.6 KiB
						
					
					
				| <?php | |
| /** | |
|  * @link http://www.yiiframework.com/ | |
|  * @copyright Copyright (c) 2008 Yii Software LLC | |
|  * @license http://www.yiiframework.com/license/ | |
|  */ | |
|  | |
| namespace yii\rbac; | |
|  | |
| use Yii; | |
| use yii\base\Object; | |
|  | |
| /** | |
|  * Item 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 [[Assignment]] assignments). | |
|  * He can perform an operation only when it is among his assigned items. | |
|  * | |
|  * @property Item[] $children All child items of this item. This property is read-only. | |
|  * @property string $name The item name. | |
|  * | |
|  * @author Qiang Xue <qiang.xue@gmail.com> | |
|  * @author Alexander Kochetov <creocoder@gmail.com> | |
|  * @since 2.0 | |
|  */ | |
| class Item extends Object | |
| { | |
| 	const TYPE_OPERATION = 0; | |
| 	const TYPE_TASK = 1; | |
| 	const TYPE_ROLE = 2; | |
|  | |
| 	/** | |
| 	 * @var Manager the auth manager of this item | |
| 	 */ | |
| 	public $manager; | |
| 	/** | |
| 	 * @var string the item description | |
| 	 */ | |
| 	public $description; | |
| 	/** | |
| 	 * @var string the business rule associated with this item | |
| 	 */ | |
| 	public $bizRule; | |
| 	/** | |
| 	 * @var mixed the additional data associated with this item | |
| 	 */ | |
| 	public $data; | |
| 	/** | |
| 	 * @var integer the authorization item type. This could be 0 (operation), 1 (task) or 2 (role). | |
| 	 */ | |
| 	public $type; | |
|  | |
| 	private $_name; | |
| 	private $_oldName; | |
|  | |
|  | |
| 	/** | |
| 	 * 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 [[Manager::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 = []) | |
| 	{ | |
| 		Yii::trace('Checking permission: ' . $this->_name, __METHOD__); | |
| 		if ($this->manager->executeBizRule($this->bizRule, $params, $this->data)) { | |
| 			if ($this->_name == $itemName) { | |
| 				return true; | |
| 			} | |
| 			foreach ($this->manager->getItemChildren($this->_name) as $item) { | |
| 				if ($item->checkAccess($itemName, $params)) { | |
| 					return true; | |
| 				} | |
| 			} | |
| 		} | |
| 		return false; | |
| 	} | |
|  | |
| 	/** | |
| 	 * @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) { | |
| 			$this->_oldName = $this->_name; | |
| 			$this->_name = $value; | |
| 		} | |
| 	} | |
|  | |
| 	/** | |
| 	 * Adds a child item. | |
| 	 * @param string $name the name of the child item | |
| 	 * @return boolean whether the item is added successfully | |
| 	 * @throws \yii\base\Exception if either parent or child doesn't exist or if a loop has been detected. | |
| 	 * @see Manager::addItemChild | |
| 	 */ | |
| 	public function addChild($name) | |
| 	{ | |
| 		return $this->manager->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 Manager::removeItemChild | |
| 	 */ | |
| 	public function removeChild($name) | |
| 	{ | |
| 		return $this->manager->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 Manager::hasItemChild | |
| 	 */ | |
| 	public function hasChild($name) | |
| 	{ | |
| 		return $this->manager->hasItemChild($this->_name, $name); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Returns the children of this item. | |
| 	 * @return Item[] all child items of this item. | |
| 	 * @see Manager::getItemChildren | |
| 	 */ | |
| 	public function getChildren() | |
| 	{ | |
| 		return $this->manager->getItemChildren($this->_name); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Assigns this item to a user. | |
| 	 * @param mixed $userId the user ID (see [[User::id]]) | |
| 	 * @param string $bizRule the business rule to be executed when [[checkAccess()]] is called | |
| 	 * for this particular authorization item. | |
| 	 * @param mixed $data additional data associated with this assignment | |
| 	 * @return Assignment the authorization assignment information. | |
| 	 * @throws \yii\base\Exception if the item has already been assigned to the user | |
| 	 * @see Manager::assign | |
| 	 */ | |
| 	public function assign($userId, $bizRule = null, $data = null) | |
| 	{ | |
| 		return $this->manager->assign($userId, $this->_name, $bizRule, $data); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Revokes an authorization assignment from a user. | |
| 	 * @param mixed $userId the user ID (see [[User::id]]) | |
| 	 * @return boolean whether removal is successful | |
| 	 * @see Manager::revoke | |
| 	 */ | |
| 	public function revoke($userId) | |
| 	{ | |
| 		return $this->manager->revoke($userId, $this->_name); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Returns a value indicating whether this item has been assigned to the user. | |
| 	 * @param mixed $userId the user ID (see [[User::id]]) | |
| 	 * @return boolean whether the item has been assigned to the user. | |
| 	 * @see Manager::isAssigned | |
| 	 */ | |
| 	public function isAssigned($userId) | |
| 	{ | |
| 		return $this->manager->isAssigned($userId, $this->_name); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Returns the item assignment information. | |
| 	 * @param mixed $userId the user ID (see [[User::id]]) | |
| 	 * @return Assignment the item assignment information. Null is returned if | |
| 	 * this item is not assigned to the user. | |
| 	 * @see Manager::getAssignment | |
| 	 */ | |
| 	public function getAssignment($userId) | |
| 	{ | |
| 		return $this->manager->getAssignment($userId, $this->_name); | |
| 	} | |
|  | |
| 	/** | |
| 	 * Saves an authorization item to persistent storage. | |
| 	 */ | |
| 	public function save() | |
| 	{ | |
| 		$this->manager->saveItem($this, $this->_oldName); | |
| 		unset($this->_oldName); | |
| 	} | |
| }
 | |
| 
 |