From ca2c73a2cda6f0dca30866777a80c0a60f61d980 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 16 Oct 2021 15:23:40 -0400 Subject: [PATCH] Account for the PUBLIC value for id parameter in Depository\PermissionSet::selectOneById --- src/Model/ProfileField.php | 2 +- src/Module/PermissionTooltip.php | 2 +- .../PermissionSet/Depository/PermissionSet.php | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Model/ProfileField.php b/src/Model/ProfileField.php index 66833890e8..c5905f934c 100644 --- a/src/Model/ProfileField.php +++ b/src/Model/ProfileField.php @@ -65,7 +65,7 @@ class ProfileField extends BaseModel switch ($name) { case 'permissionSet': if (empty($this->permissionSet)) { - $permissionSet = $this->permissionSetDepository->selectOneById($this->psid); + $permissionSet = $this->permissionSetDepository->selectOneById($this->psid, $this->uid); if ($permissionSet->uid !== $this->uid) { throw new NotFoundException(sprintf('PermissionSet %d (user-id: %d) for ProfileField %d (user-id: %d) is invalid.', $permissionSet->id, $permissionSet->uid, $this->id, $this->uid)); } diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index 3f23032d6d..df82574e92 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -39,7 +39,7 @@ class PermissionTooltip extends \Friendica\BaseModule } if (isset($model['psid'])) { - $permissionSet = DI::permissionSet()->selectOneById($model['psid']); + $permissionSet = DI::permissionSet()->selectOneById($model['psid'], $model['uid']); $model['allow_cid'] = $permissionSet->allow_cid; $model['allow_gid'] = $permissionSet->allow_gid; $model['deny_cid'] = $permissionSet->deny_cid; diff --git a/src/Security/PermissionSet/Depository/PermissionSet.php b/src/Security/PermissionSet/Depository/PermissionSet.php index fed3accee1..b4a918b6d1 100644 --- a/src/Security/PermissionSet/Depository/PermissionSet.php +++ b/src/Security/PermissionSet/Depository/PermissionSet.php @@ -89,13 +89,21 @@ class PermissionSet extends BaseDepository } /** - * @param int $id - * + * @param int $id A permissionset table row id or self::PUBLIC + * @param int|null $uid Should be provided when id can be self::PUBLIC * @return Entity\PermissionSet * @throws NotFoundException */ - public function selectOneById(int $id): Entity\PermissionSet + public function selectOneById(int $id, int $uid = null): Entity\PermissionSet { + if ($id === self::PUBLIC) { + if (empty($uid)) { + throw new \InvalidArgumentException('Missing uid for Public permission set instantiation'); + } + + return $this->factory->createFromString($uid); + } + return $this->selectOne(['id' => $id]); }