Steps to reproduce
- Log in to the Nextcloud web UI as User A.
- Open the Calendar app.
- Create or use an existing calendar owned by User A.
- Share that calendar internally with User B.
- Enable write permission for User B using the checkbox labeled
can edit and see confidential events.
- Close the calendar edit/share dialog.
- Re-open the same calendar edit/share dialog.
- Observe the permission state.
- Repeat opening the dialog / toggling permissions a few times.
This was reproduced with two local users on the same Nextcloud instance. The share is an internal Nextcloud calendar share, not a public link, not an ICS/WebCal subscription, and not a federated share.
Expected behavior
Opening the calendar edit/share dialog should not change existing share permissions.
If a calendar is shared read/write with another local user, the write permission should remain enabled until the owner explicitly changes it.
The permission checkbox should reflect the current backend state without causing a write request or toggling the permission.
Actual behavior
Opening the calendar edit/share dialog can immediately change an existing read/write share back to read-only.
After several attempts, the UI starts showing:
An error occurred, unable to change the permission of the share.
The server log then shows DAV share rate limiting:
Too many addressbook or calendar share requests
Rate limit exceeded
The issue appears to be triggered by the web Calendar app itself. The backend database confirms that the permission is actually changed server-side, not only displayed incorrectly.
In oc_dav_shares, the affected share changes between:
access = 2 -- read/write
access = 3 -- read-only
Calendar app version
6.4.0
CalDAV-clients used
The issue was reproduced using only the Nextcloud web Calendar UI.
Browser
Chrome 148.0.7778.96
Client operating system
Ubuntu LTS
Server operating system
Nextcloud AIO Docker setup on Linux
Web server
Apache
Database engine version
PostgreSQL
PHP engine version
PHP 8.3
Nextcloud version
33.0.3.2
Updated from an older installed version or fresh install
Updated from an older version
List of activated apps
activity: 6.0.0
calendar: 6.4.0
dav: 1.36.0
mail: 5.7.15
Nextcloud configuration
Nextcloud AIO
Nextcloud 33.0.3
Calendar 6.4.0
DAV 1.36.0
PostgreSQL
Apache
PHP 8.3.31
Web server error log
No relevant Apache error log entry was found for the permission toggle itself.
Log file
Browser log
Additional info
I inspected the built Calendar app source map of the installed app and found a likely cause in:
src/components/AppNavigation/EditCalendarModal/ShareItem.vue
The permission checkbox uses both v-model and an explicit update handler:
<NcCheckboxRadioSwitch
v-if="canBeSharedWritable"
v-model="isWriteable"
:disabled="updatingSharee"
@update:checked="updatePermission">
{{ $t('calendar', 'can edit and see confidential events') }}
</NcCheckboxRadioSwitch>
Additionally, there is a watcher:
watch: {
isWriteable() {
this.updatePermission()
},
},
And on mount:
mounted() {
this.isWriteable = this.initialIsWriteable
this.updateShareeEmail()
}
Because isWriteable initially defaults to false, opening the dialog for an already writable share sets it to true in mounted(). That appears to trigger the watcher, which calls updatePermission() even though the user did not change anything.
The store method toggles the current value:
async toggleCalendarShareWritable({ calendar, uri }) {
const sharee = calendar.shares.find((sharee) => sharee.uri === uri)
await calendar.dav.share(uri, !sharee.writeable)
sharee.writeable = !sharee.writeable
}
So if a share is initially writable, simply opening the dialog may trigger a toggle to read-only.
This matches the observed behavior exactly:
- Share is read/write in the database.
- Open the edit/share dialog.
- Frontend initializes
isWriteable.
- Watcher calls
updatePermission().
- Backend receives a share update request.
- Share becomes read-only.
- Repeated attempts eventually hit the DAV share rate limit.
This appears to be a web Calendar UI bug rather than a CalDAV server bug, because the unwanted permission change is triggered by opening/interacting with the web Calendar share dialog.
Steps to reproduce
can edit and see confidential events.This was reproduced with two local users on the same Nextcloud instance. The share is an internal Nextcloud calendar share, not a public link, not an ICS/WebCal subscription, and not a federated share.
Expected behavior
Opening the calendar edit/share dialog should not change existing share permissions.
If a calendar is shared read/write with another local user, the write permission should remain enabled until the owner explicitly changes it.
The permission checkbox should reflect the current backend state without causing a write request or toggling the permission.
Actual behavior
Opening the calendar edit/share dialog can immediately change an existing read/write share back to read-only.
After several attempts, the UI starts showing:
The server log then shows DAV share rate limiting:
The issue appears to be triggered by the web Calendar app itself. The backend database confirms that the permission is actually changed server-side, not only displayed incorrectly.
In
oc_dav_shares, the affected share changes between:Calendar app version
6.4.0
CalDAV-clients used
The issue was reproduced using only the Nextcloud web Calendar UI.
Browser
Chrome 148.0.7778.96
Client operating system
Ubuntu LTS
Server operating system
Nextcloud AIO Docker setup on Linux
Web server
Apache
Database engine version
PostgreSQL
PHP engine version
PHP 8.3
Nextcloud version
33.0.3.2
Updated from an older installed version or fresh install
Updated from an older version
List of activated apps
Nextcloud configuration
Web server error log
Log file
Browser log
Additional info
I inspected the built Calendar app source map of the installed app and found a likely cause in:
The permission checkbox uses both
v-modeland an explicit update handler:Additionally, there is a watcher:
And on mount:
Because
isWriteableinitially defaults tofalse, opening the dialog for an already writable share sets it totrueinmounted(). That appears to trigger the watcher, which callsupdatePermission()even though the user did not change anything.The store method toggles the current value:
So if a share is initially writable, simply opening the dialog may trigger a toggle to read-only.
This matches the observed behavior exactly:
isWriteable.updatePermission().This appears to be a web Calendar UI bug rather than a CalDAV server bug, because the unwanted permission change is triggered by opening/interacting with the web Calendar share dialog.