Skip to content
Snippets Groups Projects
Unverified Commit 22f4f4df authored by Timm Fitschen's avatar Timm Fitschen
Browse files

BUG: anonymous permissions

parent bab515e5
No related branches found
No related tags found
No related merge requests found
...@@ -27,11 +27,15 @@ import caosdb.server.entity.EntityInterface; ...@@ -27,11 +27,15 @@ import caosdb.server.entity.EntityInterface;
import caosdb.server.jobs.ContainerJob; import caosdb.server.jobs.ContainerJob;
import caosdb.server.jobs.JobAnnotation; import caosdb.server.jobs.JobAnnotation;
import caosdb.server.jobs.JobExecutionTime; import caosdb.server.jobs.JobExecutionTime;
import caosdb.server.transaction.WriteTransaction;
import caosdb.server.utils.EntityStatus; import caosdb.server.utils.EntityStatus;
import caosdb.server.utils.Observable; import caosdb.server.utils.Observable;
import caosdb.server.utils.ServerMessages; import caosdb.server.utils.ServerMessages;
@JobAnnotation(time = JobExecutionTime.POST_CHECK) @JobAnnotation(
time = JobExecutionTime.POST_CHECK,
transaction = WriteTransaction.class,
loadAlways = true)
public class Atomic extends ContainerJob { public class Atomic extends ContainerJob {
private boolean doCheck() { private boolean doCheck() {
......
...@@ -8,6 +8,7 @@ import caosdb.server.datatype.SingleValue; ...@@ -8,6 +8,7 @@ import caosdb.server.datatype.SingleValue;
import caosdb.server.entity.Entity; import caosdb.server.entity.Entity;
import caosdb.server.entity.EntityInterface; import caosdb.server.entity.EntityInterface;
import caosdb.server.entity.Message; import caosdb.server.entity.Message;
import caosdb.server.entity.Message.MessageType;
import caosdb.server.entity.wrapper.Property; import caosdb.server.entity.wrapper.Property;
import caosdb.server.jobs.JobAnnotation; import caosdb.server.jobs.JobAnnotation;
import caosdb.server.jobs.core.CheckNoAdditionalPropertiesPresent; import caosdb.server.jobs.core.CheckNoAdditionalPropertiesPresent;
...@@ -51,6 +52,9 @@ public class AWIBoxLoan extends AWIBoxLoanModel { ...@@ -51,6 +52,9 @@ public class AWIBoxLoan extends AWIBoxLoanModel {
|| isRequestReturnSetUser() || isRequestReturnSetUser()
|| isRequestReturnUpdateLoan())) { || isRequestReturnUpdateLoan())) {
addError(ServerMessages.AUTHORIZATION_ERROR); addError(ServerMessages.AUTHORIZATION_ERROR);
getContainer()
.addMessage(
new Message(MessageType.Info, 0, "Anonymous users have restricted permissions."));
return; return;
} else if (!(isRequestLoanSetUser() } else if (!(isRequestLoanSetUser()
|| isRequestLoanInsertLoan() || isRequestLoanInsertLoan()
...@@ -92,6 +96,7 @@ public class AWIBoxLoan extends AWIBoxLoanModel { ...@@ -92,6 +96,7 @@ public class AWIBoxLoan extends AWIBoxLoanModel {
EntityACL getBoxACL() { EntityACL getBoxACL() {
EntityACLFactory f = new EntityACLFactory(); EntityACLFactory f = new EntityACLFactory();
f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_ADD_PROPERTY); f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_ADD_PROPERTY);
f.grant(ANONYMOUS_ROLE, false, EntityPermission.UPDATE_REMOVE_PROPERTY);
return f.create(); return f.create();
} }
...@@ -127,11 +132,12 @@ public class AWIBoxLoan extends AWIBoxLoanModel { ...@@ -127,11 +132,12 @@ public class AWIBoxLoan extends AWIBoxLoanModel {
for (EntityInterface e : getContainer()) { for (EntityInterface e : getContainer()) {
if (boxHasLoanProperty(e)) { if (boxHasLoanProperty(e)) {
e.addError(BOX_HAS_LOAN); e.addError(BOX_HAS_LOAN);
return true; return false;
} }
if (!isBoxRecord(e) || !hasOnlyAllowedBoxProperties4RequestLoan(e)) { if (!isBoxRecord(e) || !hasOnlyAllowedBoxProperties4RequestLoan(e)) {
return false; return false;
} }
appendJob(e, CheckNoAdditionalPropertiesPresent.class);
} }
return true; return true;
} }
...@@ -152,12 +158,8 @@ public class AWIBoxLoan extends AWIBoxLoanModel { ...@@ -152,12 +158,8 @@ public class AWIBoxLoan extends AWIBoxLoanModel {
boolean hasOnlyAllowedBoxProperties4RequestLoan(EntityInterface e) { boolean hasOnlyAllowedBoxProperties4RequestLoan(EntityInterface e) {
int count = 0; int count = 0;
for (Property p : e.getProperties()) { for (Property p : e.getProperties()) {
if (p.getEntityStatus() == EntityStatus.QUALIFIED) { // this means update if (p.getEntityStatus() == EntityStatus.QUALIFIED && Objects.equals(p.getId(), getLoanId())) {
if (Objects.equals(p.getId(), getLoanId())) {
count++; count++;
continue;
}
return false; // this is not a Loan.
} }
} }
......
...@@ -21,7 +21,7 @@ public abstract class AWIBoxLoanModel extends ContainerJob { ...@@ -21,7 +21,7 @@ public abstract class AWIBoxLoanModel extends ContainerJob {
boolean isBoxRecord(EntityInterface e) { boolean isBoxRecord(EntityInterface e) {
return e.getRole() == Role.Record return e.getRole() == Role.Record
&& e.getParents().size() == 1 && e.getParents().size() == 1
&& Objects.equals(retrieveValidIDByName(e.getParents().get(0).getName()), getBoxId()); && Objects.equals(e.getParents().get(0).getId(), getBoxId());
} }
/** Is Record and has single loan parent */ /** Is Record and has single loan parent */
......
...@@ -60,6 +60,8 @@ public class EntityACL { ...@@ -60,6 +60,8 @@ public class EntityACL {
final EntityACLFactory f = new EntityACLFactory(); final EntityACLFactory f = new EntityACLFactory();
f.grant(OWNER_ROLE, "*"); f.grant(OWNER_ROLE, "*");
f.grant(OTHER_ROLE, "RETRIEVE:*"); f.grant(OTHER_ROLE, "RETRIEVE:*");
f.grant(Role.ANONYMOUS_ROLE, "RETRIEVE:*");
f.grant(Role.ANONYMOUS_ROLE, "USE:*");
f.deny(OTHER_ROLE, "UPDATE:*"); f.deny(OTHER_ROLE, "UPDATE:*");
f.deny(OTHER_ROLE, "DELETE"); f.deny(OTHER_ROLE, "DELETE");
f.deny(OTHER_ROLE, true, "EDIT:ACL"); f.deny(OTHER_ROLE, true, "EDIT:ACL");
......
...@@ -38,7 +38,6 @@ import caosdb.server.jobs.Job; ...@@ -38,7 +38,6 @@ import caosdb.server.jobs.Job;
import caosdb.server.jobs.JobExecutionTime; import caosdb.server.jobs.JobExecutionTime;
import caosdb.server.jobs.Schedule; import caosdb.server.jobs.Schedule;
import caosdb.server.jobs.core.AccessControl; import caosdb.server.jobs.core.AccessControl;
import caosdb.server.jobs.core.Atomic;
import caosdb.server.jobs.core.CheckDatatypePresent; import caosdb.server.jobs.core.CheckDatatypePresent;
import caosdb.server.jobs.core.CheckEntityACLRoles; import caosdb.server.jobs.core.CheckEntityACLRoles;
import caosdb.server.jobs.core.Mode; import caosdb.server.jobs.core.Mode;
...@@ -86,9 +85,6 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra ...@@ -86,9 +85,6 @@ public abstract class Transaction<C extends TransactionContainer> extends Abstra
this.schedule.add(loadContainerFlags); this.schedule.add(loadContainerFlags);
this.schedule.runJob(loadContainerFlags); this.schedule.runJob(loadContainerFlags);
// all transactions are atomic
this.schedule.add(Job.getJob(Atomic.class.getSimpleName(), Mode.MUST, null, this));
// AccessControl // AccessControl
this.schedule.add(Job.getJob(AccessControl.class.getSimpleName(), Mode.MUST, null, this)); this.schedule.add(Job.getJob(AccessControl.class.getSimpleName(), Mode.MUST, null, this));
this.schedule.add(Job.getJob(CheckEntityACLRoles.class.getSimpleName(), Mode.MUST, null, this)); this.schedule.add(Job.getJob(CheckEntityACLRoles.class.getSimpleName(), Mode.MUST, null, this));
......
...@@ -271,7 +271,7 @@ public class TestAWIBoxLoan { ...@@ -271,7 +271,7 @@ public class TestAWIBoxLoan {
assertEquals(EntityStatus.QUALIFIED, j.getContainer().getStatus()); assertEquals(EntityStatus.QUALIFIED, j.getContainer().getStatus());
j.run(); j.run();
assertEquals(1, j.getContainer().getMessages().size()); assertEquals(2, j.getContainer().getMessages().size());
assertEquals(EntityStatus.UNQUALIFIED, j.getContainer().getStatus()); assertEquals(EntityStatus.UNQUALIFIED, j.getContainer().getStatus());
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment