Skip to content
Snippets Groups Projects

Draft: F acm permissions2

Closed Timm Fitschen requested to merge f-acm-permissions2 into dev
3 files
+ 79
18
Compare changes
  • Side-by-side
  • Inline

Files

package org.caosdb.server.jobs.core;
package org.caosdb.server.jobs.core;
 
import java.util.Map;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.AuthorizationException;
import org.caosdb.server.entity.DeleteEntity;
import org.caosdb.server.entity.DeleteEntity;
import org.caosdb.server.entity.Message;
import org.caosdb.server.entity.Message;
@@ -18,6 +19,9 @@ import org.caosdb.server.utils.ServerMessages;
@@ -18,6 +19,9 @@ import org.caosdb.server.utils.ServerMessages;
@JobAnnotation(time = JobExecutionTime.POST_CHECK, transaction = WriteTransaction.class)
@JobAnnotation(time = JobExecutionTime.POST_CHECK, transaction = WriteTransaction.class)
public class CheckStateTransition extends EntityStateJob {
public class CheckStateTransition extends EntityStateJob {
 
private static final String PERMISSION_STATE_FORCE_FINAL = "STATE:FORCE:FINAL";
 
private static final String PERMISSION_STATE_UNASSIGN = "STATE:UNASSIGN:";
 
private static final String PERMISSION_STATE_ASSIGN = "STATE:ASSIGN:";
private static final Message TRANSITION_NOT_ALLOWED =
private static final Message TRANSITION_NOT_ALLOWED =
new Message(MessageType.Error, "Transition not allowed.");
new Message(MessageType.Error, "Transition not allowed.");
private static final Message INITIAL_STATE_NOT_ALLOWED =
private static final Message INITIAL_STATE_NOT_ALLOWED =
@@ -29,7 +33,7 @@ public class CheckStateTransition extends EntityStateJob {
@@ -29,7 +33,7 @@ public class CheckStateTransition extends EntityStateJob {
* The forceFinalState flag is especially useful if you want to delete entities in the middle of
* The forceFinalState flag is especially useful if you want to delete entities in the middle of
* the state machine's usual state cycle.
* the state machine's usual state cycle.
*/
*/
private static final String FORCE_FINAL_STATE = "forceFinalState";
private static final String FLAG_FORCE_FINAL_STATE = "forceFinalState";
@Override
@Override
protected void run() {
protected void run() {
@@ -131,14 +135,13 @@ public class CheckStateTransition extends EntityStateJob {
@@ -131,14 +135,13 @@ public class CheckStateTransition extends EntityStateJob {
*/
*/
private void checkFinalState(State oldState) throws Message {
private void checkFinalState(State oldState) throws Message {
if (!oldState.isFinal()) {
if (!oldState.isFinal()) {
if ("true".equalsIgnoreCase(getTransaction().getContainer().getFlags().get(FORCE_FINAL_STATE))
if (isForceFinal()) {
|| "true".equalsIgnoreCase(getEntity().getFlag(FORCE_FINAL_STATE))) {
getUser().checkPermission(PERMISSION_STATE_FORCE_FINAL);
// TODO permissions
} else {
return;
throw FINAL_STATE_NOT_ALLOWED;
}
}
throw FINAL_STATE_NOT_ALLOWED;
}
}
// TODO permissions
getUser().checkPermission(PERMISSION_STATE_UNASSIGN + oldState.getStateModelName());
}
}
/**
/**
@@ -151,6 +154,13 @@ public class CheckStateTransition extends EntityStateJob {
@@ -151,6 +154,13 @@ public class CheckStateTransition extends EntityStateJob {
if (!newState.isInitial()) {
if (!newState.isInitial()) {
throw INITIAL_STATE_NOT_ALLOWED;
throw INITIAL_STATE_NOT_ALLOWED;
}
}
// TODO permissions
getUser().checkPermission(PERMISSION_STATE_ASSIGN + newState.getStateModelName());
 
}
 
 
private boolean isForceFinal() {
 
Map<String, String> containerFlags = getTransaction().getContainer().getFlags();
 
return (containerFlags != null
 
&& "true".equalsIgnoreCase(containerFlags.get(FLAG_FORCE_FINAL_STATE)))
 
|| "true".equalsIgnoreCase(getEntity().getFlag(FLAG_FORCE_FINAL_STATE));
}
}
}
}
Loading