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));
}
}
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;
}
/**
- * @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]);
}