aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/api
diff options
context:
space:
mode:
authorAbyss777 <abyss@fox5.ru>2017-07-22 11:16:14 +0500
committerAbyss777 <abyss@fox5.ru>2017-07-22 11:16:14 +0500
commit4cb47c38af63696470acdc91d7b7d01512f6b2e7 (patch)
treea07ae10919ff97d8c5b91bd381508675d8fb8d6b /src/org/traccar/api
parent69c46399ee0f6b3dd2b0589cb412e9e17f040369 (diff)
downloadtraccar-server-4cb47c38af63696470acdc91d7b7d01512f6b2e7.tar.gz
traccar-server-4cb47c38af63696470acdc91d7b7d01512f6b2e7.tar.bz2
traccar-server-4cb47c38af63696470acdc91d7b7d01512f6b2e7.zip
- Add Permission helper Class
- Reorganize permission check and link - Optimize calendar retrieving
Diffstat (limited to 'src/org/traccar/api')
-rw-r--r--src/org/traccar/api/BaseResource.java30
-rw-r--r--src/org/traccar/api/resource/DeviceResource.java2
-rw-r--r--src/org/traccar/api/resource/GroupResource.java2
-rw-r--r--src/org/traccar/api/resource/PermissionsResource.java29
4 files changed, 29 insertions, 34 deletions
diff --git a/src/org/traccar/api/BaseResource.java b/src/org/traccar/api/BaseResource.java
index 920bb3931..502591efe 100644
--- a/src/org/traccar/api/BaseResource.java
+++ b/src/org/traccar/api/BaseResource.java
@@ -16,15 +16,11 @@
package org.traccar.api;
import java.sql.SQLException;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
import javax.ws.rs.core.SecurityContext;
import org.traccar.Context;
-import org.traccar.database.DataManager;
import org.traccar.model.BaseModel;
-import org.traccar.model.Device;
import org.traccar.model.User;
public class BaseResource {
@@ -40,32 +36,6 @@ public class BaseResource {
return 0;
}
- protected void checkAndLinkPermission(LinkedHashMap<String, Long> entity, boolean link)
- throws SQLException, ClassNotFoundException {
- Iterator<String> iterator = entity.keySet().iterator();
- String owner = iterator.next();
- Class<?> ownerClass = DataManager.getClassByName(owner);
- String property = iterator.next();
- Class<?> propertyClass = DataManager.getClassByName(property);
-
- long ownerId = entity.get(owner);
- long propertyId = entity.get(property);
-
- if (!link && ownerClass.equals(User.class)
- && propertyClass.equals(Device.class)) {
- if (getUserId() != ownerId) {
- Context.getPermissionsManager().checkUser(getUserId(), ownerId);
- } else {
- Context.getPermissionsManager().checkAdmin(getUserId());
- }
- } else {
- Context.getPermissionsManager().checkPermission(ownerClass, getUserId(), ownerId);
- }
- Context.getPermissionsManager().checkPermission(propertyClass, getUserId(), propertyId);
-
- Context.getDataManager().linkObject(ownerClass, ownerId, propertyClass, propertyId, link);
- }
-
protected void linkNewEntity(BaseModel entity) throws SQLException {
Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
}
diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java
index e1c0fc96d..0d6e4f09c 100644
--- a/src/org/traccar/api/resource/DeviceResource.java
+++ b/src/org/traccar/api/resource/DeviceResource.java
@@ -95,7 +95,7 @@ public class DeviceResource extends BaseResource {
return Response.ok(entity).build();
}
- @Path("{id : \\d+}")
+ @Path("{id}")
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
diff --git a/src/org/traccar/api/resource/GroupResource.java b/src/org/traccar/api/resource/GroupResource.java
index 2ecd11fe5..402e687e6 100644
--- a/src/org/traccar/api/resource/GroupResource.java
+++ b/src/org/traccar/api/resource/GroupResource.java
@@ -77,7 +77,7 @@ public class GroupResource extends BaseResource {
return Response.ok(entity).build();
}
- @Path("{id : \\d+}")
+ @Path("{id}")
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
diff --git a/src/org/traccar/api/resource/PermissionsResource.java b/src/org/traccar/api/resource/PermissionsResource.java
index 515efbe41..88fd9d092 100644
--- a/src/org/traccar/api/resource/PermissionsResource.java
+++ b/src/org/traccar/api/resource/PermissionsResource.java
@@ -29,16 +29,38 @@ import javax.ws.rs.core.Response;
import org.traccar.Context;
import org.traccar.api.BaseResource;
+import org.traccar.model.Device;
+import org.traccar.model.Permission;
+import org.traccar.model.User;
@Path("permissions")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class PermissionsResource extends BaseResource {
+ private void checkPermission(Permission permission, boolean link) {
+ if (!link && permission.getOwnerClass().equals(User.class)
+ && permission.getPropertyClass().equals(Device.class)) {
+ if (getUserId() != permission.getOwnerId()) {
+ Context.getPermissionsManager().checkUser(getUserId(), permission.getOwnerId());
+ } else {
+ Context.getPermissionsManager().checkAdmin(getUserId());
+ }
+ } else {
+ Context.getPermissionsManager().checkPermission(
+ permission.getOwnerClass(), getUserId(), permission.getOwnerId());
+ }
+ Context.getPermissionsManager().checkPermission(
+ permission.getPropertyClass(), getUserId(), permission.getPropertyId());
+ }
+
@POST
public Response add(LinkedHashMap<String, Long> entity) throws SQLException, ClassNotFoundException {
Context.getPermissionsManager().checkReadonly(getUserId());
- checkAndLinkPermission(entity, true);
+ Permission permission = new Permission(entity);
+ checkPermission(permission, true);
+ Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId(), true);
Context.getPermissionsManager().refreshPermissions(entity);
return Response.noContent().build();
}
@@ -46,7 +68,10 @@ public class PermissionsResource extends BaseResource {
@DELETE
public Response remove(LinkedHashMap<String, Long> entity) throws SQLException, ClassNotFoundException {
Context.getPermissionsManager().checkReadonly(getUserId());
- checkAndLinkPermission(entity, false);
+ Permission permission = new Permission(entity);
+ checkPermission(permission, false);
+ Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId(), false);
Context.getPermissionsManager().refreshPermissions(entity);
return Response.noContent().build();
}