Skip to content

Commit 428aa0e

Browse files
committed
Bug #13477
Improve by simplifying the code of resource sharing by ticket.
1 parent a7cf75f commit 428aa0e

29 files changed

+311
-456
lines changed

core-services/sharing/src/main/java/org/silverpeas/core/sharing/FileSharingRuntimeException.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/NodeAccessControl.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,41 +32,41 @@
3232
import org.silverpeas.core.node.model.NodePK;
3333
import org.silverpeas.core.node.service.NodeService;
3434
import org.silverpeas.core.sharing.security.AbstractShareableAccessControl;
35+
import org.silverpeas.core.sharing.security.AccessControlContext;
3536

3637
import java.util.Collection;
3738

3839
/**
39-
* Access control to shared nodes and their content.
40+
* Access control of shared nodes and their content (publications and their attachments).
4041
*/
41-
public class NodeAccessControl<R> extends AbstractShareableAccessControl<NodeTicket, R> {
42+
public class NodeAccessControl extends AbstractShareableAccessControl {
4243

43-
NodeAccessControl() {
44-
super();
44+
NodeAccessControl(NodeTicket ticket) {
45+
super(ticket);
4546
}
4647

4748
@Override
48-
protected boolean isReadable(NodeTicket ticket, R accessedObject) {
49-
NodePK nodePk = new NodePK(String.valueOf(ticket.getSharedObjectId()), ticket.getComponentId());
49+
public boolean isReadable(AccessControlContext context) {
50+
NodePK nodePk = new NodePK(String.valueOf(getSharingTicket().getSharedObjectId()),
51+
getSharingTicket().getComponentId());
5052
Collection<NodePK> authorizedNodes = getNodeDescendants(nodePk);
5153
authorizedNodes.add(nodePk);
52-
if (accessedObject instanceof SimpleDocument) {
53-
SimpleDocument attachment = (SimpleDocument) accessedObject;
54+
if (context.isAboutDocument()) {
55+
SimpleDocument attachment = context.getDocument();
5456
return isPublicationReadable(new ResourceReference(attachment.
5557
getForeignId(), attachment.getInstanceId()), nodePk.getInstanceId(), authorizedNodes);
5658
}
57-
if (accessedObject instanceof NodeDetail) {
58-
NodeDetail node = (NodeDetail) accessedObject;
59-
return authorizedNodes.contains(node.getNodePK());
60-
}
61-
return false;
59+
NodeDetail node = context.getNode();
60+
return authorizedNodes.contains(node.getNodePK());
6261
}
6362

6463
protected Collection<NodePK> getPublicationFathers(ResourceReference pk) {
6564
return getPublicationService().getAllFatherPKInSamePublicationComponentInstance(new PublicationPK(pk.getId(), pk.getInstanceId()));
6665
}
6766

6867
protected Collection<Location> getPublicationAliases(ResourceReference pk) {
69-
return getPublicationService().getAllLocations(new PublicationPK(pk.getId(), pk.getInstanceId()));
68+
return getPublicationService().getAllLocations(new PublicationPK(pk.getId(),
69+
pk.getInstanceId()));
7070
}
7171

7272
protected Collection<NodePK> getNodeDescendants(NodePK pk) {

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/NodeTicket.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,18 @@
2323
*/
2424
package org.silverpeas.core.sharing.model;
2525

26-
import java.util.Date;
27-
28-
import javax.persistence.DiscriminatorValue;
29-
import javax.persistence.Entity;
30-
26+
import org.silverpeas.core.node.model.NodeDetail;
27+
import org.silverpeas.core.node.model.NodePK;
28+
import org.silverpeas.core.node.service.NodeService;
29+
import org.silverpeas.core.sharing.security.AccessControlContext;
3130
import org.silverpeas.core.sharing.security.ShareableAccessControl;
3231
import org.silverpeas.core.sharing.security.ShareableNode;
3332
import org.silverpeas.core.sharing.security.ShareableResource;
3433

35-
import org.silverpeas.core.admin.user.model.UserDetail;
36-
import org.silverpeas.core.node.service.NodeService;
37-
import org.silverpeas.core.node.model.NodeDetail;
38-
import org.silverpeas.core.node.model.NodePK;
34+
import javax.persistence.DiscriminatorValue;
35+
import javax.persistence.Entity;
36+
import javax.persistence.Transient;
37+
import java.util.Date;
3938

4039
/**
4140
*
@@ -46,30 +45,25 @@
4645
public class NodeTicket extends Ticket {
4746
private static final long serialVersionUID = 8560572170859334369L;
4847

49-
private static final NodeAccessControl<Object> accessControl = new NodeAccessControl<>();
50-
5148
public NodeTicket(int sharedObjectId, String componentId, String creatorId, Date creationDate,
5249
Date endDate, int nbAccessMax) {
5350
super(sharedObjectId, componentId, creatorId, creationDate, endDate, nbAccessMax);
5451
this.sharedObjectType = NODE_TYPE;
5552
}
5653

57-
public NodeTicket(int sharedObjectId, String componentId, UserDetail creator, Date creationDate,
58-
Date endDate, int nbAccessMax) {
59-
super(sharedObjectId, componentId, creator, creationDate, endDate, nbAccessMax);
60-
this.sharedObjectType = NODE_TYPE;
61-
}
62-
6354
protected NodeTicket() {
6455
this.sharedObjectType = NODE_TYPE;
6556
}
6657

6758
@Override
68-
public ShareableAccessControl<NodeTicket, Object> getAccessControl() {
69-
return accessControl;
59+
@Transient
60+
public ShareableAccessControl getAccessControl() {
61+
return new NodeAccessControl(this);
7062
}
7163

7264
@Override
65+
@Transient
66+
@SuppressWarnings("unchecked")
7367
public ShareableResource<NodeDetail> getResource() {
7468
NodeService nodeService = NodeService.get();
7569
NodeDetail node = nodeService.getDetail(new NodePK(String.valueOf(getSharedObjectId()),

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/PublicationAccessControl.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,29 +24,29 @@
2424
package org.silverpeas.core.sharing.model;
2525

2626
import org.silverpeas.core.contribution.attachment.model.SimpleDocument;
27-
28-
import org.silverpeas.core.sharing.security.AbstractShareableAccessControl;
2927
import org.silverpeas.core.contribution.publication.model.PublicationDetail;
28+
import org.silverpeas.core.sharing.security.AbstractShareableAccessControl;
29+
import org.silverpeas.core.sharing.security.AccessControlContext;
3030

3131
/**
32-
* Access control to shared publications and their content
32+
* Access control of shared publications and their attachments.
3333
*/
34-
public class PublicationAccessControl<R>
35-
extends AbstractShareableAccessControl<PublicationTicket, R> {
34+
public class PublicationAccessControl extends AbstractShareableAccessControl {
3635

37-
PublicationAccessControl() {
38-
super();
36+
PublicationAccessControl(PublicationTicket ticket) {
37+
super(ticket);
3938
}
4039

4140
@Override
42-
protected boolean isReadable(PublicationTicket ticket, R accessedObject) throws Exception {
43-
if (accessedObject instanceof SimpleDocument) {
44-
SimpleDocument attachment = (SimpleDocument) accessedObject;
45-
return attachment.getForeignId().equals(String.valueOf(ticket.getSharedObjectId()));
41+
public boolean isReadable(AccessControlContext context) {
42+
if (context.isAboutDocument()) {
43+
SimpleDocument document = context.getDocument();
44+
return document.getForeignId()
45+
.equals(String.valueOf(getSharingTicket().getSharedObjectId()));
4646
}
47-
if (accessedObject instanceof PublicationDetail) {
48-
PublicationDetail publication = (PublicationDetail) accessedObject;
49-
return ticket.getResource().getAccessedObject().equals(publication);
47+
if (context.isAboutPublication()) {
48+
PublicationDetail publication = context.getPublication();
49+
return getSharingTicket().getResource().getAccessedObject().equals(publication);
5050
}
5151
return false;
5252
}

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/PublicationTicket.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
*/
2424
package org.silverpeas.core.sharing.model;
2525

26-
import org.silverpeas.core.admin.user.model.UserDetail;
2726
import org.silverpeas.core.contribution.publication.model.PublicationDetail;
2827
import org.silverpeas.core.contribution.publication.model.PublicationPK;
2928
import org.silverpeas.core.contribution.publication.service.PublicationService;
@@ -33,6 +32,7 @@
3332

3433
import javax.persistence.DiscriminatorValue;
3534
import javax.persistence.Entity;
35+
import javax.persistence.Transient;
3636
import java.util.Date;
3737

3838
/**
@@ -45,30 +45,25 @@ public class PublicationTicket extends Ticket {
4545

4646
private static final long serialVersionUID = 6661700474412230957L;
4747

48-
private static final PublicationAccessControl accessControl = new PublicationAccessControl();
49-
5048
public PublicationTicket(int sharedObjectId, String componentId, String creatorId, Date creationDate,
5149
Date endDate, int nbAccessMax) {
5250
super(sharedObjectId, componentId, creatorId, creationDate, endDate, nbAccessMax);
5351
this.sharedObjectType = PUBLICATION_TYPE;
5452
}
5553

56-
public PublicationTicket(int sharedObjectId, String componentId, UserDetail creator, Date creationDate,
57-
Date endDate, int nbAccessMax) {
58-
super(sharedObjectId, componentId, creator, creationDate, endDate, nbAccessMax);
59-
this.sharedObjectType = PUBLICATION_TYPE;
60-
}
61-
6254
protected PublicationTicket() {
6355
this.sharedObjectType = PUBLICATION_TYPE;
6456
}
6557

6658
@Override
67-
public ShareableAccessControl<PublicationTicket, PublicationDetail> getAccessControl() {
68-
return accessControl;
59+
@Transient
60+
public ShareableAccessControl getAccessControl() {
61+
return new PublicationAccessControl(this);
6962
}
7063

7164
@Override
65+
@Transient
66+
@SuppressWarnings("unchecked")
7267
public ShareableResource<PublicationDetail> getResource() {
7368
PublicationService publicationService = PublicationService.get();
7469
PublicationDetail publication = publicationService.getDetail(new PublicationPK(String.valueOf(getSharedObjectId()),

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/SimpleFileAccessControl.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,20 @@
2424
package org.silverpeas.core.sharing.model;
2525

2626
import org.silverpeas.core.sharing.security.AbstractShareableAccessControl;
27-
import org.silverpeas.core.contribution.attachment.model.SimpleDocument;
27+
import org.silverpeas.core.sharing.security.AccessControlContext;
2828

2929
/**
30-
* Access control to shared attachments
30+
* Access control of shared documents.
3131
*/
32-
public class SimpleFileAccessControl
33-
extends AbstractShareableAccessControl<SimpleFileTicket, SimpleDocument> {
32+
public class SimpleFileAccessControl extends AbstractShareableAccessControl {
3433

35-
SimpleFileAccessControl() {
36-
super();
34+
SimpleFileAccessControl(SimpleFileTicket ticket) {
35+
super(ticket);
3736
}
3837

3938
@Override
40-
protected boolean isReadable(SimpleFileTicket ticket, SimpleDocument document) throws Exception {
41-
return ticket.getResource().getAccessedObject().equals(document);
39+
public boolean isReadable(AccessControlContext context) {
40+
return context.isAboutDocument()
41+
&& getSharingTicket().getResource().getAccessedObject().equals(context.getPublication());
4242
}
4343
}

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/SimpleFileTicket.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,17 @@
2323
*/
2424
package org.silverpeas.core.sharing.model;
2525

26-
import org.silverpeas.core.sharing.security.ShareableAccessControl;
27-
import org.silverpeas.core.sharing.security.ShareableAttachment;
28-
import org.silverpeas.core.sharing.security.ShareableResource;
2926
import org.silverpeas.core.admin.user.model.UserDetail;
3027
import org.silverpeas.core.contribution.attachment.AttachmentServiceProvider;
3128
import org.silverpeas.core.contribution.attachment.model.SimpleDocument;
3229
import org.silverpeas.core.contribution.attachment.model.SimpleDocumentPK;
30+
import org.silverpeas.core.sharing.security.ShareableAccessControl;
31+
import org.silverpeas.core.sharing.security.ShareableAttachment;
32+
import org.silverpeas.core.sharing.security.ShareableResource;
3333

3434
import javax.persistence.DiscriminatorValue;
3535
import javax.persistence.Entity;
36+
import javax.persistence.Transient;
3637
import java.util.Date;
3738

3839
/**
@@ -43,8 +44,6 @@
4344
public class SimpleFileTicket extends Ticket {
4445
private static final long serialVersionUID = -475026338727454787L;
4546

46-
private static final SimpleFileAccessControl accessControl = new SimpleFileAccessControl();
47-
4847
protected SimpleFileTicket() {
4948
this.sharedObjectType = FILE_TYPE;
5049
}
@@ -62,8 +61,9 @@ public SimpleFileTicket(int sharedObjectId, String componentId, String creatorId
6261
}
6362

6463
@Override
64+
@Transient
6565
public ShareableAccessControl getAccessControl() {
66-
return accessControl;
66+
return new SimpleFileAccessControl(this);
6767
}
6868

6969
public SimpleFileTicket(String key, int sharedObjectId, String componentId, UserDetail creator,
@@ -73,6 +73,8 @@ public SimpleFileTicket(String key, int sharedObjectId, String componentId, User
7373
}
7474

7575
@Override
76+
@Transient
77+
@SuppressWarnings("unchecked")
7678
public ShareableResource<SimpleDocument> getResource() {
7779
SimpleDocumentPK pk = new SimpleDocumentPK(null, getComponentId());
7880
pk.setOldSilverpeasId(getSharedObjectId());

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/Ticket.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ public void addDownload() {
273273

274274
public abstract ShareableAccessControl getAccessControl();
275275

276-
public abstract ShareableResource getResource();
276+
public abstract <R> ShareableResource<R> getResource();
277277

278278
public enum QUERY_ORDER_BY {
279279

core-services/sharing/src/main/java/org/silverpeas/core/sharing/model/VersionFileAccessControl.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,20 @@
2424
package org.silverpeas.core.sharing.model;
2525

2626
import org.silverpeas.core.sharing.security.AbstractShareableAccessControl;
27-
import org.silverpeas.core.contribution.attachment.model.HistorisedDocument;
27+
import org.silverpeas.core.sharing.security.AccessControlContext;
2828

2929
/**
30-
* Access control to shared version documents.
30+
* Access control of shared versioned documents.
3131
*/
32-
public class VersionFileAccessControl
33-
extends AbstractShareableAccessControl<VersionFileTicket, HistorisedDocument> {
32+
public class VersionFileAccessControl extends AbstractShareableAccessControl {
3433

35-
VersionFileAccessControl() {
36-
super();
34+
VersionFileAccessControl(VersionFileTicket ticket) {
35+
super(ticket);
3736
}
3837

3938
@Override
40-
protected boolean isReadable(VersionFileTicket ticket, HistorisedDocument document)
41-
throws Exception {
42-
return ticket.getDocument().equals(document);
39+
public boolean isReadable(AccessControlContext context) {
40+
VersionFileTicket theTicket = (VersionFileTicket) getSharingTicket();
41+
return context.isAboutDocument() && theTicket.getDocument().equals(context.getDocument());
4342
}
4443
}

0 commit comments

Comments
 (0)