/**
  * Returns a permission identified by the given id.
  *
  * @param unknown_type $permission_id
  * @return unknown
  */
 public function &getPermission($permission_id)
 {
     $return_value = null;
     $permission_id = strtoupper($permission_id);
     if (key_exists($permission_id, $this->_permissions)) {
         $return_value = $this->_permissions[$permission_id];
     } else {
         //lazy initialization of special permission PERMISSION_ALL:
         if ($permission_id == 'PERMISSION_ALL') {
             //PERMISSION_ALL:
             $return_value = new __Permission('PERMISSION_ALL', 0);
             foreach ($this->_permissions as &$permission) {
                 $return_value->addPermission($permission);
                 unset($permission);
             }
             $this->_permissions[$return_value->getId()] =& $return_value;
         } else {
             throw __ExceptionFactory::getInstance()->createException('ERR_UNKNOW_PERMISSION_ID', array($permission_id));
         }
     }
     return $return_value;
 }
 /**
  * This method add a {@link __Permission} instance to current role.
  *
  * @param __Permission $permission The permission to add to the current role
  */
 public function addPermission(__Permission &$permission)
 {
     $this->_permissions[$permission->getId()] =& $permission;
     $this->_recalculateEquivalentPermission();
 }
 public final function addJuniorPermission(__Permission &$junior_permission)
 {
     $this->_junior_permissions[$junior_permission->getId()] =& $junior_permission;
     $this->_binary_representation = $this->_binary_representation | $junior_permission->_binary_representation;
 }