Skip to content

Fix readonly UI for create document user permission #19554

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

madsrasmussen
Copy link
Contributor

Fixes: #19286

Please ensure that the following user permission combinations work as expected:

  • Create + Update
  • Create
  • Update

@Copilot Copilot AI review requested due to automatic review settings June 13, 2025 11:48
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR refactors how create/update permissions are enforced by removing individual flags, introducing unified handlers, and reacting to the document's isNew state.

  • Replaced #userCanCreate/#userCanUpdate flags with #enforceUserPermission method
  • Added #handleUserPermissionChange to centralize read-only guard logic
  • Observes isNew to decide whether to apply create or update permission rules
Comments suppressed due to low confidence (1)

src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts:192

  • Add a JSDoc comment for #enforceUserPermission (and similarly for #handleUserPermissionChange) to explain its purpose, parameters, and side-effects on the read-only guard.
#enforceUserPermission(verb: string, message: string) {

@@ -434,6 +415,9 @@ export class UmbDocumentWorkspaceContext
this.readOnlyGuard?.addRule({
unique: identifier,
message,
/* This guard is a bit backwards. The rule is permitted to be read-only.
If the user does not have permission, we set it to true = permitted to be read-only. */
permitted: true,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From an outsider trying to use the readOnly guard, I only stumbled across this PR and realised I had to set permitted to true as opposed to false like the propertyWriteGuard

Would it best if this could be aligned like the others, just to avoid confusion.
And another comment is that the docs page mentions not to use readonlyGuard. Is this the case or can us package devs use it ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We already relied on it in core, and to keep this fix as simple as possible, I just corrected the code. We want to move away from it in core as well, and the current plan is for it to be deprecated and removed eventually. If you can solve your case with the view/write guards, I recommend using them. If you can't, please let us know.

As mentioned in the comment, the DX is a bit backward compared to the view/write guards. We want guards to grant access to something instead of removing it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Create permission is misleading
2 participants