Skip to content

Commit ecbf2b4

Browse files
committed
Permission refactoring
1 parent 2c294bd commit ecbf2b4

File tree

13 files changed

+79
-92
lines changed

13 files changed

+79
-92
lines changed

logicaldoc-cmis/src/main/java/com/logicaldoc/cmis/LDRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2824,7 +2824,7 @@ private void validatePermission(String objectId, CallContext context, Permission
28242824
throws CmisPermissionDeniedException {
28252825
if (!checkPermission(objectId != null ? getObject(objectId) : null, context, permission)) {
28262826
CmisPermissionDeniedException exception = new CmisPermissionDeniedException(
2827-
"Permission " + (permission != null ? permission.getName() : "") + " not granted on " + objectId);
2827+
"Permission " + (permission != null ? permission.name() : "") + " not granted on " + objectId);
28282828
if (log.isDebugEnabled())
28292829
log.error(exception.getMessage(), exception);
28302830
throw exception;
Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
package com.logicaldoc.core.document;
22

3-
import java.util.HashSet;
4-
import java.util.Set;
5-
63
import javax.persistence.Embeddable;
74

85
import com.logicaldoc.core.security.ExtendedAccessControlEntry;
9-
import com.logicaldoc.core.security.Permission;
106

117
/**
128
* Represents all the permissions granted to a group against a business object
@@ -29,35 +25,4 @@ public DocumentAccessControlEntry(DocumentAccessControlEntry source) {
2925
public DocumentAccessControlEntry(long groupId) {
3026
super(groupId);
3127
}
32-
33-
@Override
34-
public Set<Permission> grantedPermissions() {
35-
HashSet<Permission> granted = new HashSet<>();
36-
grantedBasicPermissions(granted);
37-
38-
if (security == 1)
39-
granted.add(Permission.SECURITY);
40-
if (sign == 1)
41-
granted.add(Permission.SIGN);
42-
if (subscription == 1)
43-
granted.add(Permission.SUBSCRIPTION);
44-
if (workflow == 1)
45-
granted.add(Permission.WORKFLOW);
46-
if (readingreq == 1)
47-
granted.add(Permission.READINGREQ);
48-
if (customid == 1)
49-
granted.add(Permission.CUSTOMID);
50-
return granted;
51-
}
52-
53-
@Override
54-
public void grantPermissions(Set<Permission> permissions) {
55-
super.grantPermissions(permissions);
56-
security = booleanToInt(permissions.contains(Permission.SECURITY));
57-
sign = booleanToInt(permissions.contains(Permission.SIGN));
58-
subscription = booleanToInt(permissions.contains(Permission.SUBSCRIPTION));
59-
workflow = booleanToInt(permissions.contains(Permission.WORKFLOW));
60-
readingreq = booleanToInt(permissions.contains(Permission.READINGREQ));
61-
customid = booleanToInt(permissions.contains(Permission.CUSTOMID));
62-
}
6328
}

logicaldoc-core/src/main/java/com/logicaldoc/core/folder/HibernateFolderDAO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1111,7 +1111,7 @@ public Collection<Long> findFolderIdByUserIdAndPermission(long userId, Permissio
11111111
StringBuilder query1 = new StringBuilder(
11121112
"select distinct(A.ld_folderid) from ld_folder_acl A where A.ld_read=1 ");
11131113
if (permission != Permission.READ)
1114-
query1.append(" and A.ld_" + permission.getName() + "=1 ");
1114+
query1.append(" and A.ld_" + permission.name().toLowerCase() + "=1 ");
11151115

11161116
appendUserGroupIdsCondition(user, query1);
11171117

logicaldoc-core/src/main/java/com/logicaldoc/core/security/ExtendedAccessControlEntry.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import javax.persistence.MappedSuperclass;
88

99
/**
10-
* Class for grouping common permissions for DocumentAccessControlEntry and FolderAccessControlEntry
10+
* Class for grouping common permissions for DocumentAccessControlEntry and
11+
* FolderAccessControlEntry
1112
*
1213
* @author Giuseppe Desiato - LogicalDOC
1314
* @since 9.2
@@ -122,6 +123,29 @@ protected void grantedBasicPermissions(Set<Permission> granted) {
122123
granted.add(Permission.EMAIL);
123124
}
124125

126+
@Override
127+
public void grantPermissions(Set<Permission> permissions) {
128+
super.grantPermissions(permissions);
129+
preview = booleanToInt(permissions.contains(Permission.PREVIEW));
130+
download = booleanToInt(permissions.contains(Permission.DOWNLOAD));
131+
security = booleanToInt(permissions.contains(Permission.SECURITY));
132+
delete = booleanToInt(permissions.contains(Permission.DELETE));
133+
rename = booleanToInt(permissions.contains(Permission.RENAME));
134+
immutable = booleanToInt(permissions.contains(Permission.IMMUTABLE));
135+
sign = booleanToInt(permissions.contains(Permission.SIGN));
136+
archive = booleanToInt(permissions.contains(Permission.ARCHIVE));
137+
workflow = booleanToInt(permissions.contains(Permission.WORKFLOW));
138+
calendar = booleanToInt(permissions.contains(Permission.CALENDAR));
139+
subscription = booleanToInt(permissions.contains(Permission.SUBSCRIPTION));
140+
password = booleanToInt(permissions.contains(Permission.PASSWORD));
141+
print = booleanToInt(permissions.contains(Permission.PRINT));
142+
move = booleanToInt(permissions.contains(Permission.MOVE));
143+
email = booleanToInt(permissions.contains(Permission.EMAIL));
144+
automation = booleanToInt(permissions.contains(Permission.AUTOMATION));
145+
readingreq = booleanToInt(permissions.contains(Permission.READINGREQ));
146+
customid = booleanToInt(permissions.contains(Permission.CUSTOMID));
147+
}
148+
125149
public int getPreview() {
126150
return preview;
127151
}

logicaldoc-core/src/main/java/com/logicaldoc/core/security/HibernateSessionDAO.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,6 @@ public Session findBySid(String sid) {
7272
return null;
7373
}
7474

75-
@Override
76-
public void initialize(Session session) {
77-
refresh(session);
78-
}
79-
8075
@Override
8176
public List<Session> findByNode(String node) {
8277
try {

logicaldoc-core/src/main/java/com/logicaldoc/core/security/Permission.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,7 @@
3838
* @since 4.0
3939
*/
4040
public enum Permission {
41-
READ("read"), DOWNLOAD("download"), WRITE("write"), ADD("add"), SECURITY("security"), IMMUTABLE(
42-
"immutable"), DELETE("delete"), RENAME("rename"), IMPORT("import"), EXPORT("export"), SIGN("sign"), ARCHIVE(
43-
"archive"), WORKFLOW("workflow"), CALENDAR("calendar"), SUBSCRIPTION("subscription"), PRINT(
44-
"print"), PASSWORD("password"), MOVE("move"), EMAIL("email"), AUTOMATION(
45-
"automation"), STORE("store"), READINGREQ(
46-
"readingreq"), PREVIEW("preview"), CUSTOMID("customid");
47-
48-
private final String name;
49-
50-
private Permission(String name) {
51-
this.name = name;
52-
}
53-
54-
public String getName() {
55-
return name;
56-
}
41+
READ, DOWNLOAD, WRITE, ADD, SECURITY, IMMUTABLE, DELETE, RENAME, IMPORT, EXPORT, SIGN, ARCHIVE, WORKFLOW, CALENDAR, SUBSCRIPTION, PRINT, PASSWORD, MOVE, EMAIL, AUTOMATION, STORE, READINGREQ, PREVIEW, CUSTOMID;
5742

5843
public static Set<Permission> all() {
5944
return new HashSet<>(Arrays.asList(Permission.values()));
@@ -73,12 +58,7 @@ public static Set<Permission> forGuests() {
7358
set.add(DOWNLOAD);
7459
set.add(PRINT);
7560
set.add(EMAIL);
76-
set.add(Permission.SUBSCRIPTION);
61+
set.add(SUBSCRIPTION);
7762
return set;
7863
}
79-
80-
@Override
81-
public String toString() {
82-
return name;
83-
}
8464
}

logicaldoc-core/src/main/java/com/logicaldoc/core/security/menu/HibernateMenuDAO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ public List<Long> findMenuIdByUserIdAndPermission(long userId, Permission permis
494494
if (enabledOnly)
495495
query1.append(" and B.ld_enabled=1 ");
496496

497-
query1.append(" and A.ld_" + permission.getName() + "=1 ");
497+
query1.append(" and A.ld_" + permission.name().toLowerCase() + "=1 ");
498498
query1.append(" and A.ld_groupid in (");
499499
query1.append(
500500
user.getGroups().stream().map(g -> Long.toString(g.getId())).collect(Collectors.joining(",")));

logicaldoc-core/src/test/java/com/logicaldoc/core/AbstractCoreTestCase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import org.junit.Before;
99

10+
import com.logicaldoc.core.security.SessionDAO;
1011
import com.logicaldoc.core.security.apikey.ApiKey;
1112
import com.logicaldoc.core.security.apikey.ApiKeyDAO;
1213
import com.logicaldoc.core.store.Store;
@@ -79,6 +80,8 @@ private void prepareStore() throws IOException {
7980

8081
@Override
8182
public void tearDown() throws IOException, SQLException {
83+
Context.get(SessionDAO.class).cleanOldSessions(-1);
84+
8285
super.tearDown();
8386

8487
FileUtil.delete(rootStoreOne);

logicaldoc-core/src/test/java/com/logicaldoc/core/folder/HibernateFolderDAOTest.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.logicaldoc.core.document.IndexingStatus;
3737
import com.logicaldoc.core.metadata.Template;
3838
import com.logicaldoc.core.metadata.TemplateDAO;
39+
import com.logicaldoc.core.security.AccessControlEntry;
3940
import com.logicaldoc.core.security.Permission;
4041
import com.logicaldoc.core.security.Tenant;
4142
import com.logicaldoc.core.security.user.User;
@@ -587,7 +588,6 @@ public void testStore() throws PersistenceException {
587588
assertNotNull(alias);
588589

589590
folder.clearTags();
590-
assertEquals("[]", folder.getTags().toString());
591591

592592
Set<String> words = Set.of("C", "DDDDDDDDDDDD");
593593
folder.setTagsFromWords(words);
@@ -602,13 +602,31 @@ public void testStore() throws PersistenceException {
602602
ace.grantPermissions(
603603
Set.of(Permission.READ, Permission.WRITE, Permission.DELETE, Permission.MOVE, Permission.DOWNLOAD));
604604
folder.addAccessControlEntry(ace);
605+
606+
ace = new FolderAccessControlEntry();
607+
ace.setGroupId(4L);
608+
ace.grantPermissions(Permission.forGuests());
609+
folder.addAccessControlEntry(ace);
610+
611+
ace = new FolderAccessControlEntry();
612+
ace.setGroupId(10L);
613+
ace.grantPermissions(Permission.match("read", "download"));
614+
folder.addAccessControlEntry(ace);
615+
605616
testSubject.store(folder);
606-
assertNotNull(folder);
607617

608618
folder = testSubject.findById(folder.getId());
609619
testSubject.initialize(folder);
610-
assertEquals(3, folder.getAccessControlList().size());
611-
620+
assertEquals(5, folder.getAccessControlList().size());
621+
622+
AccessControlEntry face = folder.getAccessControlEntry(4L);
623+
assertTrue(face.grantedPermissions().contains(Permission.PREVIEW));
624+
assertFalse(face.grantedPermissions().contains(Permission.WRITE));
625+
626+
face = folder.getAccessControlEntry(10L);
627+
assertTrue(face.grantedPermissions().contains(Permission.DOWNLOAD));
628+
assertFalse(face.grantedPermissions().contains(Permission.PREVIEW));
629+
612630
// Set a securityRef
613631
folder.setSecurityRef(5L);
614632
testSubject.store(folder);
@@ -627,15 +645,13 @@ public void testStore() throws PersistenceException {
627645
folder.setName("unexisting parent");
628646
folder.setParentId(99999L);
629647

630-
boolean runOk = false;
631648
try {
632649
transaction.setSessionId("xxxxx");
633650
testSubject.store(folder, transaction);
634-
runOk = true;
651+
fail("No error here, but should be");
635652
} catch (PersistenceException e) {
636653
assertEquals("Unexisting parent folder " + folder.getParentId(), e.getMessage());
637654
}
638-
assertFalse(runOk);
639655

640656
folder = testSubject.findById(6);
641657
testSubject.initialize(folder);
@@ -675,7 +691,7 @@ public void testStore() throws PersistenceException {
675691
folder.getAccessControlList().remove(folder.getAccessControlEntry(2));
676692
assertEquals(2, folder.getAccessControlList().size());
677693
testSubject.store(folder);
678-
assertNotNull(folder);
694+
679695
folder = testSubject.findById(Folder.ROOTID);
680696
testSubject.initialize(folder);
681697
assertEquals(4, folder.getAccessControlList().size());

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/calendar/EventsCalendar.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,18 +57,7 @@ public EventsCalendar(Long docId, Date date, final AsyncCallback<Void> onChangeC
5757
setChosenDate(new Date());
5858

5959
// Localization of the day names
60-
setDateHeaderCustomizer(new DateHeaderCustomizer() {
61-
62-
@Override
63-
public String getHeaderTitle(Date date, int dayOfWeek, String defaultValue, CalendarView calendarView) {
64-
String key = "dayname_" + dayOfWeek;
65-
String label = I18N.message(key);
66-
if (label.equals(key))
67-
return defaultValue;
68-
else
69-
return label;
70-
}
71-
});
60+
localizeDayNames();
7261

7362
addEventClickHandler(event -> {
7463
CalendarService.Instance.get().getEvent(event.getEvent().getAttributeAsLong("eventId"),
@@ -105,4 +94,19 @@ public void onSuccess(GUICalendarEvent calEv) {
10594
event.cancel();
10695
});
10796
}
97+
98+
private void localizeDayNames() {
99+
setDateHeaderCustomizer(new DateHeaderCustomizer() {
100+
101+
@Override
102+
public String getHeaderTitle(Date date, int dayOfWeek, String defaultValue, CalendarView calendarView) {
103+
String key = "dayname_" + dayOfWeek;
104+
String label = I18N.message(key);
105+
if (label.equals(key))
106+
return defaultValue;
107+
else
108+
return label;
109+
}
110+
});
111+
}
108112
}

0 commit comments

Comments
 (0)