diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 9698882bdbd67..7f4f6e6c24c8d 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -690,17 +690,17 @@ public function canEditProperty(string $uid, string $property): bool { return match($property) { // Display name is always set by LDAP IAccountManager::PROPERTY_DISPLAYNAME => false, - IAccountManager::PROPERTY_EMAIL => ((string)$this->access->connection->ldapEmailAttribute !== ''), - IAccountManager::PROPERTY_PHONE => ((string)$this->access->connection->ldapAttributePhone !== ''), - IAccountManager::PROPERTY_WEBSITE => ((string)$this->access->connection->ldapAttributeWebsite !== ''), - IAccountManager::PROPERTY_ADDRESS => ((string)$this->access->connection->ldapAttributeAddress !== ''), - IAccountManager::PROPERTY_FEDIVERSE => ((string)$this->access->connection->ldapAttributeFediverse !== ''), - IAccountManager::PROPERTY_ORGANISATION => ((string)$this->access->connection->ldapAttributeOrganisation !== ''), - IAccountManager::PROPERTY_ROLE => ((string)$this->access->connection->ldapAttributeRole !== ''), - IAccountManager::PROPERTY_HEADLINE => ((string)$this->access->connection->ldapAttributeHeadline !== ''), - IAccountManager::PROPERTY_BIOGRAPHY => ((string)$this->access->connection->ldapAttributeBiography !== ''), - IAccountManager::PROPERTY_BIRTHDATE => ((string)$this->access->connection->ldapAttributeBirthDate !== ''), - IAccountManager::PROPERTY_PRONOUNS => ((string)$this->access->connection->ldapAttributePronouns !== ''), + IAccountManager::PROPERTY_EMAIL => ((string)$this->access->connection->ldapEmailAttribute === ''), + IAccountManager::PROPERTY_PHONE => ((string)$this->access->connection->ldapAttributePhone === ''), + IAccountManager::PROPERTY_WEBSITE => ((string)$this->access->connection->ldapAttributeWebsite === ''), + IAccountManager::PROPERTY_ADDRESS => ((string)$this->access->connection->ldapAttributeAddress === ''), + IAccountManager::PROPERTY_FEDIVERSE => ((string)$this->access->connection->ldapAttributeFediverse === ''), + IAccountManager::PROPERTY_ORGANISATION => ((string)$this->access->connection->ldapAttributeOrganisation === ''), + IAccountManager::PROPERTY_ROLE => ((string)$this->access->connection->ldapAttributeRole === ''), + IAccountManager::PROPERTY_HEADLINE => ((string)$this->access->connection->ldapAttributeHeadline === ''), + IAccountManager::PROPERTY_BIOGRAPHY => ((string)$this->access->connection->ldapAttributeBiography === ''), + IAccountManager::PROPERTY_BIRTHDATE => ((string)$this->access->connection->ldapAttributeBirthDate === ''), + IAccountManager::PROPERTY_PRONOUNS => ((string)$this->access->connection->ldapAttributePronouns === ''), default => true, }; } diff --git a/apps/user_ldap/tests/User_LDAPTest.php b/apps/user_ldap/tests/User_LDAPTest.php index 3ba73087119f4..325f109ee6c50 100644 --- a/apps/user_ldap/tests/User_LDAPTest.php +++ b/apps/user_ldap/tests/User_LDAPTest.php @@ -1460,4 +1460,37 @@ public function testImplementsAction(string $configurable, string|int $value, in $this->assertSame($expected, $this->backend->implementsActions($actionCode)); } + + public static function canEditPropertyProvider(): array { + return [ + // Display name is always managed by LDAP + [\OCP\Accounts\IAccountManager::PROPERTY_DISPLAYNAME, '', false], + [\OCP\Accounts\IAccountManager::PROPERTY_DISPLAYNAME, 'cn', false], + // Fields with no LDAP attribute configured are user-editable + [\OCP\Accounts\IAccountManager::PROPERTY_EMAIL, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_PHONE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_WEBSITE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_ADDRESS, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_FEDIVERSE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_ORGANISATION, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_ROLE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_HEADLINE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_BIOGRAPHY, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_BIRTHDATE, '', true], + [\OCP\Accounts\IAccountManager::PROPERTY_PRONOUNS, '', true], + // Fields with an LDAP attribute configured are managed by LDAP, not user-editable + [\OCP\Accounts\IAccountManager::PROPERTY_EMAIL, 'mail', false], + [\OCP\Accounts\IAccountManager::PROPERTY_PHONE, 'telephoneNumber', false], + [\OCP\Accounts\IAccountManager::PROPERTY_WEBSITE, 'labeledURI', false], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'canEditPropertyProvider')] + public function testCanEditProperty(string $property, string $ldapAttributeValue, bool $expected): void { + $this->connection->expects($this->any()) + ->method('__get') + ->willReturn($ldapAttributeValue); + + $this->assertSame($expected, $this->backend->canEditProperty('uid', $property)); + } }