diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java index 3dc9e7ba5863869ad2cd53c08fe6ed8b1cb87a72..b733dbb07bccbb302d938c89da06e56b6fc6dae9 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAO.java @@ -96,7 +96,7 @@ class AccessDAO { return accesses.isEmpty() ? null : accesses.get(0); } - Access loadAccess(VFSMetadata metadata, Identity identity, String app) { + Access loadAccess(VFSMetadata metadata, Identity identity, String app, boolean canEdit) { if (metadata == null || identity == null) return null; QueryBuilder sb = new QueryBuilder(); @@ -107,12 +107,14 @@ class AccessDAO { sb.and().append("access.metadata.key = :metadataKey"); sb.and().append("access.identity.key = :identityKey"); sb.and().append("access.app = :app"); + sb.and().append("access.canEdit = :canEdit"); List<Access> accesses = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), Access.class) .setParameter("metadataKey", metadata.getKey()) .setParameter("identityKey", identity.getKey()) .setParameter("app", app) + .setParameter("canEdit", canEdit) .getResultList(); return accesses.isEmpty() ? null : accesses.get(0); } diff --git a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java index 7f67adbe47e45126a05daaf36f4e2b1ad0bfdece..1083fcecef8459d42db9bfb3bc92e736420b21cf 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/wopi/manager/WopiServiceImpl.java @@ -121,7 +121,7 @@ public class WopiServiceImpl implements WopiService { @Override public Access getOrCreateAccess(VFSMetadata vfsMetadata, Identity identity, DocEditorSecurityCallback secCallback, String app, Date expiresAt) { - Access access = accessDao.loadAccess(vfsMetadata, identity, app); + Access access = accessDao.loadAccess(vfsMetadata, identity, app, getCanEdit(secCallback)); if (access != null) { if (accessUnchanged(access, secCallback) && !expired(access)) { access = accessDao.updateExpiresAt(access, expiresAt); @@ -135,7 +135,6 @@ public class WopiServiceImpl implements WopiService { } private boolean accessUnchanged(Access access, DocEditorSecurityCallback secCallback) { - if (access.isCanEdit() != getCanEdit(secCallback)) return false; if (access.isCanClose() != secCallback.canClose()) return false; if (access.isVersionControlled() != secCallback.isVersionControlled()) return false; return true; diff --git a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java index be60bd20a13f16aaab1640cc8bb1c0e8adccf1a7..dce53cbeecb3680894f32855c1bb3828c154d129 100644 --- a/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java +++ b/src/test/java/org/olat/core/commons/services/doceditor/wopi/manager/AccessDAOTest.java @@ -126,11 +126,13 @@ public class AccessDAOTest extends OlatTestCase { Identity identity2 = JunitTestHelper.createAndPersistIdentityAsRndUser("wopi2"); VFSMetadata vfsMetadata = vfsMetadataDAO.createMetadata(random(), "relPath", "file.name", new Date(), 1000l, false, "", "file", null); String app = random(); - Access access = sut.createAccess(vfsMetadata, identity, app, random(), true, true, true, null); - sut.createAccess(vfsMetadata, identity2, app, random(), true, true, true, null); + boolean canEdit = true; + Access access = sut.createAccess(vfsMetadata, identity, app, random(), canEdit, true, true, null); + sut.createAccess(vfsMetadata, identity2, app, random(), canEdit, true, true, null); + sut.createAccess(vfsMetadata, identity, app, random(), !canEdit, true, true, null); dbInstance.commitAndCloseSession(); - Access reloadedAccess = sut.loadAccess(vfsMetadata, identity, app); + Access reloadedAccess = sut.loadAccess(vfsMetadata, identity, app, canEdit); assertThat(reloadedAccess).isEqualTo(access); }