Group grant in addressbook does not give access to personal categories, public or private

This commit is contained in:
nathan 2023-02-24 13:54:41 -07:00
parent 74f0822494
commit bbd41b4255

View File

@ -568,16 +568,17 @@ class Categories
// Load the application grants // Load the application grants
if(($category['appname'] ?? null) == $this->app_name && !isset($this->grants)) if(($category['appname'] ?? null) == $this->app_name && !isset($this->grants))
{ {
$this->grants = $GLOBALS['egw']->acl->get_grants($this->app_name,true); // Addressbook group grant does not grant permission for personal so don't enumerate groups
$this->grants = $GLOBALS['egw']->acl->get_grants($this->app_name, $this->app_name != 'addressbook');
} }
// Check for ACL granted access, the self::GLOBAL_ACCOUNT user must not get access by ACL to keep old behaviour // Check for ACL granted access, the self::GLOBAL_ACCOUNT user must not get access by ACL to keep old behaviour
$acl_grant = $this->account_id != self::GLOBAL_ACCOUNT && ($category['appname'] ?? null) == $this->app_name; $acl_grant = $this->account_id != self::GLOBAL_ACCOUNT && ($category['appname'] ?? null) == $this->app_name && $this->app_name != 'addressbook';
$owner_grant = false; $owner_grant = false;
foreach(!empty($category['owner']) ? explode(',',$category['owner']) : [] as $owner) foreach(!empty($category['owner']) ? explode(',',$category['owner']) : [] as $owner)
{ {
$owner_grant = $owner_grant || (is_array($this->grants) && !empty($this->grants[$owner]) && ($this->grants[$owner] & $needed) && $owner_grant = $owner_grant || (is_array($this->grants) && !empty($this->grants[$owner]) && ($this->grants[$owner] & $needed) &&
($category['access'] === 'public' || ($this->grants[$owner] & Acl::PRIVAT))); ($category['appname'] !== 'addressbook' && $category['access'] === 'public' || ($this->grants[$owner] & Acl::PRIVAT)));
} }
return $acl_grant && $owner_grant; return $acl_grant && $owner_grant;
} }