123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?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 <[email protected]>
- * @author Alexander Kochetov <[email protected]>
- * @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);
- $this->_oldName = null;
- }
- }
|