summaryrefslogtreecommitdiff
path: root/framework/Security
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Security')
-rw-r--r--framework/Security/TUser.php98
1 files changed, 65 insertions, 33 deletions
diff --git a/framework/Security/TUser.php b/framework/Security/TUser.php
index 3ff41104..7ed76c04 100644
--- a/framework/Security/TUser.php
+++ b/framework/Security/TUser.php
@@ -34,21 +34,13 @@ Prado::using('System.Security.IUserManager');
class TUser extends TComponent implements IUser
{
/**
- * @var IUserManager user manager
- */
- private $_manager;
- /**
- * @var boolean if the user is a guest
- */
- private $_isGuest=true;
- /**
- * @var string username
+ * @var array persistent state
*/
- private $_name='';
+ private $_state;
/**
- * @var array user roles
+ * @var IUserManager user manager
*/
- private $_roles=array();
+ private $_manager;
/**
* Constructor.
@@ -56,8 +48,9 @@ class TUser extends TComponent implements IUser
*/
public function __construct(IUserManager $manager)
{
+ $this->_state=array();
$this->_manager=$manager;
- $this->_name=$manager->getGuestName();
+ $this->setName($manager->getGuestName());
}
/**
@@ -69,11 +62,11 @@ class TUser extends TComponent implements IUser
}
/**
- * @return string username
+ * @return string username, defaults to empty string.
*/
public function getName()
{
- return $this->_name;
+ return $this->getState('Name','');
}
/**
@@ -81,15 +74,15 @@ class TUser extends TComponent implements IUser
*/
public function setName($value)
{
- $this->_name=$value;
+ $this->setState('Name',$value,'');
}
/**
- * @return boolean if the user is a guest
+ * @return boolean if the user is a guest, defaults to true.
*/
public function getIsGuest()
{
- return $this->_isGuest;
+ return $this->getState('IsGuest',true);
}
/**
@@ -97,11 +90,12 @@ class TUser extends TComponent implements IUser
*/
public function setIsGuest($value)
{
- if($this->_isGuest=TPropertyValue::ensureBoolean($value))
+ if($isGuest=TPropertyValue::ensureBoolean($value))
{
- $this->_name=$this->_manager->getGuestName();
- $this->_roles=array();
+ $this->setName($this->_manager->getGuestName());
+ $this->setRoles(array());
}
+ $this->setState('IsGuest',$isGuest);
}
/**
@@ -109,7 +103,7 @@ class TUser extends TComponent implements IUser
*/
public function getRoles()
{
- return $this->_roles;
+ return $this->getState('Roles',array());
}
/**
@@ -118,15 +112,16 @@ class TUser extends TComponent implements IUser
public function setRoles($value)
{
if(is_array($value))
- $this->_roles=$value;
+ $this->setState('Roles',$value,array());
else
{
- $this->_roles=array();
+ $roles=array();
foreach(explode(',',$value) as $role)
{
if(($role=trim($role))!=='')
- $this->_roles[]=$role;
+ $roles[]=$role;
}
+ $this->setState('Roles',$roles,array());
}
}
@@ -136,7 +131,7 @@ class TUser extends TComponent implements IUser
*/
public function isInRole($role)
{
- foreach($this->_roles as $r)
+ foreach($this->getRoles() as $r)
if(strcasecmp($role,$r)===0)
return true;
return false;
@@ -147,7 +142,7 @@ class TUser extends TComponent implements IUser
*/
public function saveToString()
{
- return serialize(array($this->_name,$this->_roles,$this->_isGuest));
+ return serialize($this->_state);
}
/**
@@ -157,14 +152,51 @@ class TUser extends TComponent implements IUser
public function loadFromString($data)
{
if(!empty($data))
- {
- $array=unserialize($data);
- $this->_name=$array[0];
- $this->_roles=$array[1];
- $this->_isGuest=$array[2];
- }
+ $this->_state=unserialize($data);
+ if(!is_array($this->_state))
+ $this->_state=array();
return $this;
}
+
+ /**
+ * Returns the value of a variable that is stored in user session.
+ *
+ * This function is designed to be used by TUser descendant classes
+ * who want to store additional user information in user session.
+ * A variable, if stored in user session using {@link setState} can be
+ * retrieved back using this function.
+ *
+ * @param string variable name
+ * @param mixed default value
+ * @return mixed the value of the variable. If it doesn't exist, the provided default value will be returned
+ * @see setState
+ */
+ protected function getState($key,$defaultValue=null)
+ {
+ return isset($this->_state[$key])?$this->_state[$key]:$defaultValue;
+ }
+
+ /**
+ * Stores a variable in user session.
+ *
+ * This function is designed to be used by TUser descendant classes
+ * who want to store additional user information in user session.
+ * By storing a variable using this function, the variable may be retrieved
+ * back later using {@link getState}. The variable will be persistent
+ * across page requests during a user session.
+ *
+ * @param string variable name
+ * @param mixed variable value
+ * @param mixed default value. If $value===$defaultValue, the variable will be removed from persistent storage.
+ * @see getState
+ */
+ protected function setState($key,$value,$defaultValue=null)
+ {
+ if($value===$defaultValue)
+ unset($this->_state[$key]);
+ else
+ $this->_state[$key]=$value;
+ }
}
?> \ No newline at end of file