aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/api/resource/PermissionsResource.java65
1 files changed, 49 insertions, 16 deletions
diff --git a/src/main/java/org/traccar/api/resource/PermissionsResource.java b/src/main/java/org/traccar/api/resource/PermissionsResource.java
index b89d9d376..1dbbfa190 100644
--- a/src/main/java/org/traccar/api/resource/PermissionsResource.java
+++ b/src/main/java/org/traccar/api/resource/PermissionsResource.java
@@ -17,7 +17,9 @@
package org.traccar.api.resource;
import java.sql.SQLException;
-import java.util.LinkedHashMap;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -55,30 +57,61 @@ public class PermissionsResource extends BaseResource {
permission.getPropertyClass(), getUserId(), permission.getPropertyId());
}
+ private void refreshPermissions(List<LinkedHashMap<String, Long>> entities) {
+ Set<String> ownerProperty = new HashSet<>();
+ entities.stream()
+ .map(e -> {
+ try {
+ return new Permission(e);
+ } catch (ClassNotFoundException classNotFoundException) {
+ classNotFoundException.printStackTrace();
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .filter(p -> ownerProperty.add(p.getOwnerClass().getName() + p.getPropertyClass().getName()))
+ .forEach(p -> Context.getPermissionsManager().refreshPermissions(p));
+ }
+
@POST
public Response add(LinkedHashMap<String, Long> entity) throws SQLException, ClassNotFoundException {
+ return add(Stream.of(entity).collect(Collectors.toList()));
+ }
+
+ @Path("bulk")
+ @POST
+ public Response add(List<LinkedHashMap<String, Long>> entities) throws SQLException, ClassNotFoundException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Permission permission = new Permission(entity);
- checkPermission(permission, true);
- Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
- permission.getPropertyClass(), permission.getPropertyId(), true);
- LogAction.link(getUserId(), permission.getOwnerClass(), permission.getOwnerId(),
- permission.getPropertyClass(), permission.getPropertyId());
- Context.getPermissionsManager().refreshPermissions(permission);
+ for (LinkedHashMap<String, Long> entity: entities) {
+ Permission permission = new Permission(entity);
+ checkPermission(permission, true);
+ Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId(), true);
+ LogAction.link(getUserId(), permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId());
+ }
+ refreshPermissions(entities);
return Response.noContent().build();
}
@DELETE
public Response remove(LinkedHashMap<String, Long> entity) throws SQLException, ClassNotFoundException {
+ return remove(Stream.of(entity).collect(Collectors.toList()));
+ }
+
+ @DELETE
+ @Path("bulk")
+ public Response remove(List<LinkedHashMap<String, Long>> entities) throws SQLException, ClassNotFoundException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Permission permission = new Permission(entity);
- checkPermission(permission, false);
- Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
- permission.getPropertyClass(), permission.getPropertyId(), false);
- LogAction.unlink(getUserId(), permission.getOwnerClass(), permission.getOwnerId(),
- permission.getPropertyClass(), permission.getPropertyId());
- Context.getPermissionsManager().refreshPermissions(permission);
+ for (LinkedHashMap<String, Long> entity: entities) {
+ Permission permission = new Permission(entity);
+ checkPermission(permission, false);
+ Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId(), false);
+ LogAction.unlink(getUserId(), permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId());
+ }
+ refreshPermissions(entities);
return Response.noContent().build();
}
-
}