forked from extern/egroupware
never invalidate session in sharing, as we cant regenerate it (and we dont need to)
This commit is contained in:
parent
719b2ff834
commit
ff3ae9815d
@ -347,9 +347,10 @@ class Acl
|
|||||||
* @param string $location location
|
* @param string $location location
|
||||||
* @param int $account_id account id
|
* @param int $account_id account id
|
||||||
* @param int $rights rights
|
* @param int $rights rights
|
||||||
|
* @param boolean $invalidate_session =true false: do NOT invalidate session
|
||||||
* @return boolean allways true
|
* @return boolean allways true
|
||||||
*/
|
*/
|
||||||
function add_repository($app, $location, $account_id, $rights)
|
function add_repository($app, $location, $account_id, $rights, $invalidate_session=true)
|
||||||
{
|
{
|
||||||
//echo "<p>self::add_repository('$app','$location',$account_id,$rights);</p>\n";
|
//echo "<p>self::add_repository('$app','$location',$account_id,$rights);</p>\n";
|
||||||
$this->db->insert(self::TABLE,array(
|
$this->db->insert(self::TABLE,array(
|
||||||
@ -360,7 +361,7 @@ class Acl
|
|||||||
'acl_account' => $account_id,
|
'acl_account' => $account_id,
|
||||||
),__LINE__,__FILE__);
|
),__LINE__,__FILE__);
|
||||||
|
|
||||||
if ($account_id == $GLOBALS['egw_info']['user']['account_id'] &&
|
if ($invalidate_session && $account_id == $GLOBALS['egw_info']['user']['account_id'] &&
|
||||||
method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited
|
method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited
|
||||||
{
|
{
|
||||||
$GLOBALS['egw']->invalidate_session_cache();
|
$GLOBALS['egw']->invalidate_session_cache();
|
||||||
@ -373,10 +374,11 @@ class Acl
|
|||||||
*
|
*
|
||||||
* @param string $app appname
|
* @param string $app appname
|
||||||
* @param string $location location
|
* @param string $location location
|
||||||
* @param int/boolean $accountid = '' account id, default 0=$this->account_id, or false to delete all entries for $app/$location
|
* @param int|boolean $accountid = '' account id, default 0=$this->account_id, or false to delete all entries for $app/$location
|
||||||
|
* @param boolean $invalidate_session =true false: do NOT invalidate session
|
||||||
* @return int number of rows deleted
|
* @return int number of rows deleted
|
||||||
*/
|
*/
|
||||||
function delete_repository($app, $location, $accountid='')
|
function delete_repository($app, $location, $accountid='', $invalidate_session=true)
|
||||||
{
|
{
|
||||||
static $cache_accountid = array();
|
static $cache_accountid = array();
|
||||||
|
|
||||||
@ -395,15 +397,17 @@ class Acl
|
|||||||
$where['acl_account'] = $cache_accountid[$accountid] = get_account_id($accountid,$this->account_id);
|
$where['acl_account'] = $cache_accountid[$accountid] = get_account_id($accountid,$this->account_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited
|
|
||||||
{
|
|
||||||
$GLOBALS['egw']->invalidate_session_cache();
|
|
||||||
}
|
|
||||||
if ($app == '%' || $app == '%%') unset($where['acl_appname']);
|
if ($app == '%' || $app == '%%') unset($where['acl_appname']);
|
||||||
|
|
||||||
$this->db->delete(self::TABLE,$where,__LINE__,__FILE__);
|
$this->db->delete(self::TABLE,$where,__LINE__,__FILE__);
|
||||||
|
|
||||||
return $this->db->affected_rows();
|
$deleted = $this->db->affected_rows();
|
||||||
|
|
||||||
|
if ($invalidate_session && $deleted && method_exists($GLOBALS['egw'],'invalidate_session_cache')) // egw object in setup is limited
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->invalidate_session_cache();
|
||||||
|
}
|
||||||
|
return $deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -449,8 +449,12 @@ class Egw extends Egw\Base
|
|||||||
*/
|
*/
|
||||||
static function invalidate_session_cache()
|
static function invalidate_session_cache()
|
||||||
{
|
{
|
||||||
unset($_SESSION['egw_info_cache']);
|
// if sharing is active, we must not invalidate the session, as it can not be regenerated
|
||||||
unset($_SESSION['egw_object_cache']);
|
if (empty($GLOBALS['egw']->sharing))
|
||||||
|
{
|
||||||
|
unset($_SESSION['egw_info_cache']);
|
||||||
|
unset($_SESSION['egw_object_cache']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1497,7 +1497,7 @@ class StreamWrapper extends Api\Db\Pdo implements Vfs\StreamWrapperIface
|
|||||||
{
|
{
|
||||||
self::$extended_acl = null; // force new read of eACL, as there could be multiple eACL for that path
|
self::$extended_acl = null; // force new read of eACL, as there could be multiple eACL for that path
|
||||||
}
|
}
|
||||||
$ret = $GLOBALS['egw']->acl->delete_repository(self::EACL_APPNAME,$fs_id,(int)$owner);
|
$ret = $GLOBALS['egw']->acl->delete_repository(self::EACL_APPNAME, $fs_id, (int)$owner, false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1507,7 +1507,7 @@ class StreamWrapper extends Api\Db\Pdo implements Vfs\StreamWrapperIface
|
|||||||
// set rights for this class, if applicable
|
// set rights for this class, if applicable
|
||||||
self::$extended_acl[$path] |= $rights;
|
self::$extended_acl[$path] |= $rights;
|
||||||
}
|
}
|
||||||
$ret = $GLOBALS['egw']->acl->add_repository(self::EACL_APPNAME,$fs_id,$owner,$rights);
|
$ret = $GLOBALS['egw']->acl->add_repository(self::EACL_APPNAME, $fs_id, $owner, $rights, false);
|
||||||
}
|
}
|
||||||
if ($ret)
|
if ($ret)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user