aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/api
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2017-07-23 18:29:36 +1200
committerGitHub <noreply@github.com>2017-07-23 18:29:36 +1200
commit4b2372336d0496c85befe099914434e5b68f05b3 (patch)
tree798de625a07c18287e829b3a037cacee179ebcff /src/org/traccar/api
parentba82047a492be54545961716814584d8880d28ae (diff)
parent5a65c0d6be8ffc2db0ffdb0c35ecedfb2b3750c7 (diff)
downloadtraccar-server-4b2372336d0496c85befe099914434e5b68f05b3.tar.gz
traccar-server-4b2372336d0496c85befe099914434e5b68f05b3.tar.bz2
traccar-server-4b2372336d0496c85befe099914434e5b68f05b3.zip
Merge pull request #3373 from Abyss777/refactor_managers
Refactor managers, permissions etc
Diffstat (limited to 'src/org/traccar/api')
-rw-r--r--src/org/traccar/api/BaseResource.java2
-rw-r--r--src/org/traccar/api/resource/AttributePermissionResource.java58
-rw-r--r--src/org/traccar/api/resource/AttributeResource.java30
-rw-r--r--src/org/traccar/api/resource/CalendarPermissionResource.java57
-rw-r--r--src/org/traccar/api/resource/CalendarResource.java23
-rw-r--r--src/org/traccar/api/resource/DeviceAttributeResource.java58
-rw-r--r--src/org/traccar/api/resource/DeviceDriverResource.java58
-rw-r--r--src/org/traccar/api/resource/DeviceGeofenceResource.java57
-rw-r--r--src/org/traccar/api/resource/DevicePermissionResource.java66
-rw-r--r--src/org/traccar/api/resource/DeviceResource.java15
-rw-r--r--src/org/traccar/api/resource/DriverPermissionResource.java59
-rw-r--r--src/org/traccar/api/resource/DriverResource.java29
-rw-r--r--src/org/traccar/api/resource/EventResource.java3
-rw-r--r--src/org/traccar/api/resource/GeofencePermissionResource.java56
-rw-r--r--src/org/traccar/api/resource/GeofenceResource.java30
-rw-r--r--src/org/traccar/api/resource/GroupAttributeResource.java58
-rw-r--r--src/org/traccar/api/resource/GroupDriverResource.java58
-rw-r--r--src/org/traccar/api/resource/GroupGeofenceResource.java56
-rw-r--r--src/org/traccar/api/resource/GroupPermissionResource.java62
-rw-r--r--src/org/traccar/api/resource/GroupResource.java15
-rw-r--r--src/org/traccar/api/resource/PermissionsResource.java79
-rw-r--r--src/org/traccar/api/resource/UserPermissionResource.java56
-rw-r--r--src/org/traccar/api/resource/UserResource.java5
23 files changed, 154 insertions, 836 deletions
diff --git a/src/org/traccar/api/BaseResource.java b/src/org/traccar/api/BaseResource.java
index 44ef33c53..cc272df9c 100644
--- a/src/org/traccar/api/BaseResource.java
+++ b/src/org/traccar/api/BaseResource.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 - 2016 Anton Tananaev (anton@traccar.org)
+ * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/org/traccar/api/resource/AttributePermissionResource.java b/src/org/traccar/api/resource/AttributePermissionResource.java
deleted file mode 100644
index 1924bcdf1..000000000
--- a/src/org/traccar/api/resource/AttributePermissionResource.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.AttributePermission;
-
-@Path("permissions/attributes")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class AttributePermissionResource extends BaseResource {
-
- @POST
- public Response add(AttributePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().linkAttribute(entity.getUserId(), entity.getAttributeId());
- Context.getAttributesManager().refreshUserAttributes();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(AttributePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().unlinkAttribute(entity.getUserId(), entity.getAttributeId());
- Context.getAttributesManager().refreshUserAttributes();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/AttributeResource.java b/src/org/traccar/api/resource/AttributeResource.java
index 4d326779b..7b81d3ffb 100644
--- a/src/org/traccar/api/resource/AttributeResource.java
+++ b/src/org/traccar/api/resource/AttributeResource.java
@@ -38,6 +38,7 @@ import org.traccar.api.BaseResource;
import org.traccar.database.AttributesManager;
import org.traccar.model.Attribute;
import org.traccar.model.Position;
+import org.traccar.model.User;
import org.traccar.processing.ComputedAttributesHandler;
@Path("attributes/computed")
@@ -52,42 +53,43 @@ public class AttributeResource extends BaseResource {
AttributesManager attributesManager = Context.getAttributesManager();
if (refresh) {
- attributesManager.refreshAttributes();
+ attributesManager.refreshItems();
}
Set<Long> result = new HashSet<>();
if (all) {
if (Context.getPermissionsManager().isAdmin(getUserId())) {
- result.addAll(attributesManager.getAllAttributes());
+ result.addAll(attributesManager.getAllItems());
} else {
Context.getPermissionsManager().checkManager(getUserId());
- result.addAll(attributesManager.getManagedAttributes(getUserId()));
+ result.addAll(attributesManager.getManagedItems(getUserId()));
}
} else {
if (userId == 0) {
userId = getUserId();
}
Context.getPermissionsManager().checkUser(getUserId(), userId);
- result.addAll(attributesManager.getUserAttributes(userId));
+ result.addAll(attributesManager.getUserItems(userId));
}
if (groupId != 0) {
Context.getPermissionsManager().checkGroup(getUserId(), groupId);
- result.retainAll(attributesManager.getGroupAttributes(groupId));
+ result.retainAll(attributesManager.getGroupItems(groupId));
}
if (deviceId != 0) {
Context.getPermissionsManager().checkDevice(getUserId(), deviceId);
- result.retainAll(attributesManager.getDeviceAttributes(deviceId));
+ result.retainAll(attributesManager.getDeviceItems(deviceId));
}
- return attributesManager.getAttributes(result);
+ return attributesManager.getItems(Attribute.class, result);
}
private Response add(Attribute entity) throws SQLException {
- Context.getAttributesManager().addAttribute(entity);
- Context.getDataManager().linkAttribute(getUserId(), entity.getId());
- Context.getAttributesManager().refreshUserAttributes();
+ Context.getPermissionsManager().checkReadonly(getUserId());
+ Context.getAttributesManager().addItem(entity);
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
+ Context.getAttributesManager().refreshUserItems();
return Response.ok(entity).build();
}
@@ -127,8 +129,8 @@ public class AttributeResource extends BaseResource {
@PUT
public Response update(Attribute entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getId());
- Context.getAttributesManager().updateAttribute(entity);
+ Context.getPermissionsManager().checkPermission(Attribute.class, getUserId(), entity.getId());
+ Context.getAttributesManager().updateItem(entity);
return Response.ok(entity).build();
}
@@ -136,8 +138,8 @@ public class AttributeResource extends BaseResource {
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkAttribute(getUserId(), id);
- Context.getAttributesManager().removeAttribute(id);
+ Context.getPermissionsManager().checkPermission(Attribute.class, getUserId(), id);
+ Context.getAttributesManager().removeItem(id);
return Response.noContent().build();
}
diff --git a/src/org/traccar/api/resource/CalendarPermissionResource.java b/src/org/traccar/api/resource/CalendarPermissionResource.java
deleted file mode 100644
index a49254b6b..000000000
--- a/src/org/traccar/api/resource/CalendarPermissionResource.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2016 Anton Tananaev (anton@traccar.org)
- * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.CalendarPermission;
-
-@Path("permissions/calendars")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class CalendarPermissionResource extends BaseResource {
-
- @POST
- public Response add(CalendarPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkCalendar(getUserId(), entity.getCalendarId());
- Context.getDataManager().linkCalendar(entity.getUserId(), entity.getCalendarId());
- Context.getCalendarManager().refreshUserCalendars();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(CalendarPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkCalendar(getUserId(), entity.getCalendarId());
- Context.getDataManager().unlinkCalendar(entity.getUserId(), entity.getCalendarId());
- Context.getCalendarManager().refreshUserCalendars();
- return Response.noContent().build();
- }
-}
diff --git a/src/org/traccar/api/resource/CalendarResource.java b/src/org/traccar/api/resource/CalendarResource.java
index 641d3b4b5..a0f8656af 100644
--- a/src/org/traccar/api/resource/CalendarResource.java
+++ b/src/org/traccar/api/resource/CalendarResource.java
@@ -33,7 +33,9 @@ import javax.ws.rs.core.Response;
import org.traccar.Context;
import org.traccar.api.BaseResource;
+import org.traccar.database.CalendarManager;
import org.traccar.model.Calendar;
+import org.traccar.model.User;
@Path("calendars")
@Produces(MediaType.APPLICATION_JSON)
@@ -44,28 +46,29 @@ public class CalendarResource extends BaseResource {
public Collection<Calendar> get(
@QueryParam("all") boolean all, @QueryParam("userId") long userId) throws SQLException {
+ CalendarManager calendarManager = Context.getCalendarManager();
if (all) {
if (Context.getPermissionsManager().isAdmin(getUserId())) {
- return Context.getCalendarManager().getAllCalendars();
+ return calendarManager.getItems(Calendar.class, calendarManager.getAllItems());
} else {
Context.getPermissionsManager().checkManager(getUserId());
- return Context.getCalendarManager().getManagedCalendars(getUserId());
+ return calendarManager.getItems(Calendar.class, calendarManager.getManagedItems(getUserId()));
}
} else {
if (userId == 0) {
userId = getUserId();
}
Context.getPermissionsManager().checkUser(getUserId(), userId);
- return Context.getCalendarManager().getUserCalendars(userId);
+ return calendarManager.getItems(Calendar.class, calendarManager.getUserItems(userId));
}
}
@POST
public Response add(Calendar entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getCalendarManager().addCalendar(entity);
- Context.getDataManager().linkCalendar(getUserId(), entity.getId());
- Context.getCalendarManager().refreshUserCalendars();
+ Context.getCalendarManager().addItem(entity);
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
+ Context.getCalendarManager().refreshUserItems();
return Response.ok(entity).build();
}
@@ -73,8 +76,8 @@ public class CalendarResource extends BaseResource {
@PUT
public Response update(Calendar entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkCalendar(getUserId(), entity.getId());
- Context.getCalendarManager().updateCalendar(entity);
+ Context.getPermissionsManager().checkPermission(Calendar.class, getUserId(), entity.getId());
+ Context.getCalendarManager().updateItem(entity);
return Response.ok(entity).build();
}
@@ -82,8 +85,8 @@ public class CalendarResource extends BaseResource {
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkCalendar(getUserId(), id);
- Context.getCalendarManager().removeCalendar(id);
+ Context.getPermissionsManager().checkPermission(Calendar.class, getUserId(), id);
+ Context.getCalendarManager().removeItem(id);
return Response.noContent().build();
}
}
diff --git a/src/org/traccar/api/resource/DeviceAttributeResource.java b/src/org/traccar/api/resource/DeviceAttributeResource.java
deleted file mode 100644
index 82d17bcc6..000000000
--- a/src/org/traccar/api/resource/DeviceAttributeResource.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.DeviceAttribute;
-
-@Path("devices/attributes")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class DeviceAttributeResource extends BaseResource {
-
- @POST
- public Response add(DeviceAttribute entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().linkDeviceAttribute(entity.getDeviceId(), entity.getAttributeId());
- Context.getAttributesManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(DeviceAttribute entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().unlinkDeviceAttribute(entity.getDeviceId(), entity.getAttributeId());
- Context.getAttributesManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/DeviceDriverResource.java b/src/org/traccar/api/resource/DeviceDriverResource.java
deleted file mode 100644
index 341c50909..000000000
--- a/src/org/traccar/api/resource/DeviceDriverResource.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.DeviceDriver;
-
-@Path("devices/drivers")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class DeviceDriverResource extends BaseResource {
-
- @POST
- public Response add(DeviceDriver entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().linkDeviceDriver(entity.getDeviceId(), entity.getDriverId());
- Context.getDriversManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(DeviceDriver entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().unlinkDeviceDriver(entity.getDeviceId(), entity.getDriverId());
- Context.getDriversManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/DeviceGeofenceResource.java b/src/org/traccar/api/resource/DeviceGeofenceResource.java
deleted file mode 100644
index 6254fe3cf..000000000
--- a/src/org/traccar/api/resource/DeviceGeofenceResource.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2016 Anton Tananaev (anton@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.DeviceGeofence;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import java.sql.SQLException;
-
-@Path("devices/geofences")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class DeviceGeofenceResource extends BaseResource {
-
- @POST
- public Response add(DeviceGeofence entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().linkDeviceGeofence(entity.getDeviceId(), entity.getGeofenceId());
- Context.getGeofenceManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(DeviceGeofence entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().unlinkDeviceGeofence(entity.getDeviceId(), entity.getGeofenceId());
- Context.getGeofenceManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/DevicePermissionResource.java b/src/org/traccar/api/resource/DevicePermissionResource.java
deleted file mode 100644
index 6e00dc47f..000000000
--- a/src/org/traccar/api/resource/DevicePermissionResource.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2015 - 2017 Anton Tananaev (anton@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.DevicePermission;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.sql.SQLException;
-
-@Path("permissions/devices")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class DevicePermissionResource extends BaseResource {
-
- @POST
- public Response add(DevicePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getDataManager().linkDevice(entity.getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(DevicePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- if (getUserId() != entity.getUserId()) {
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- } else {
- Context.getPermissionsManager().checkAdmin(getUserId());
- }
- Context.getPermissionsManager().checkDevice(getUserId(), entity.getDeviceId());
- Context.getDataManager().unlinkDevice(entity.getUserId(), entity.getDeviceId());
- Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java
index 2957d623c..6cf7a6219 100644
--- a/src/org/traccar/api/resource/DeviceResource.java
+++ b/src/org/traccar/api/resource/DeviceResource.java
@@ -19,6 +19,7 @@ import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.model.Device;
import org.traccar.model.DeviceTotalDistance;
+import org.traccar.model.User;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -83,11 +84,9 @@ public class DeviceResource extends BaseResource {
Context.getPermissionsManager().checkDeviceReadonly(getUserId());
Context.getPermissionsManager().checkDeviceLimit(getUserId());
Context.getDeviceManager().addDevice(entity);
- Context.getDataManager().linkDevice(getUserId(), entity.getId());
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
return Response.ok(entity).build();
}
@@ -99,9 +98,7 @@ public class DeviceResource extends BaseResource {
Context.getPermissionsManager().checkDevice(getUserId(), entity.getId());
Context.getDeviceManager().updateDevice(entity);
Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
return Response.ok(entity).build();
}
@@ -113,9 +110,7 @@ public class DeviceResource extends BaseResource {
Context.getPermissionsManager().checkDevice(getUserId(), id);
Context.getDeviceManager().removeDevice(id);
Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
Context.getAliasesManager().removeDevice(id);
return Response.noContent().build();
}
diff --git a/src/org/traccar/api/resource/DriverPermissionResource.java b/src/org/traccar/api/resource/DriverPermissionResource.java
deleted file mode 100644
index fd1ca7c6d..000000000
--- a/src/org/traccar/api/resource/DriverPermissionResource.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-
-import org.traccar.model.DriverPermission;
-
-@Path("permissions/drivers")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class DriverPermissionResource extends BaseResource {
-
- @POST
- public Response add(DriverPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().linkDriver(entity.getUserId(), entity.getDriverId());
- Context.getDriversManager().refreshUserDrivers();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(DriverPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().unlinkDriver(entity.getUserId(), entity.getDriverId());
- Context.getDriversManager().refreshUserDrivers();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/DriverResource.java b/src/org/traccar/api/resource/DriverResource.java
index 7fe0af473..72eadb711 100644
--- a/src/org/traccar/api/resource/DriverResource.java
+++ b/src/org/traccar/api/resource/DriverResource.java
@@ -37,6 +37,7 @@ import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.database.DriversManager;
import org.traccar.model.Driver;
+import org.traccar.model.User;
@Path("drivers")
@Produces(MediaType.APPLICATION_JSON)
@@ -50,44 +51,44 @@ public class DriverResource extends BaseResource {
DriversManager driversManager = Context.getDriversManager();
if (refresh) {
- driversManager.refreshDrivers();
+ driversManager.refreshItems();
}
Set<Long> result = new HashSet<>();
if (all) {
if (Context.getPermissionsManager().isAdmin(getUserId())) {
- result.addAll(driversManager.getAllDrivers());
+ result.addAll(driversManager.getAllItems());
} else {
Context.getPermissionsManager().checkManager(getUserId());
- result.addAll(driversManager.getManagedDrivers(getUserId()));
+ result.addAll(driversManager.getManagedItems(getUserId()));
}
} else {
if (userId == 0) {
userId = getUserId();
}
Context.getPermissionsManager().checkUser(getUserId(), userId);
- result.addAll(driversManager.getUserDrivers(userId));
+ result.addAll(driversManager.getUserItems(userId));
}
if (groupId != 0) {
Context.getPermissionsManager().checkGroup(getUserId(), groupId);
- result.retainAll(driversManager.getGroupDrivers(groupId));
+ result.retainAll(driversManager.getGroupItems(groupId));
}
if (deviceId != 0) {
Context.getPermissionsManager().checkDevice(getUserId(), deviceId);
- result.retainAll(driversManager.getDeviceDrivers(deviceId));
+ result.retainAll(driversManager.getDeviceItems(deviceId));
}
- return driversManager.getDrivers(result);
+ return driversManager.getItems(Driver.class, result);
}
@POST
public Response add(Driver entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getDriversManager().addDriver(entity);
- Context.getDataManager().linkDriver(getUserId(), entity.getId());
- Context.getDriversManager().refreshUserDrivers();
+ Context.getDriversManager().addItem(entity);
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
+ Context.getDriversManager().refreshUserItems();
return Response.ok(entity).build();
}
@@ -95,8 +96,8 @@ public class DriverResource extends BaseResource {
@PUT
public Response update(Driver entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getId());
- Context.getDriversManager().updateDriver(entity);
+ Context.getPermissionsManager().checkPermission(Driver.class, getUserId(), entity.getId());
+ Context.getDriversManager().updateItem(entity);
return Response.ok(entity).build();
}
@@ -104,8 +105,8 @@ public class DriverResource extends BaseResource {
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkDriver(getUserId(), id);
- Context.getDriversManager().removeDriver(id);
+ Context.getPermissionsManager().checkPermission(Driver.class, getUserId(), id);
+ Context.getDriversManager().removeItem(id);
return Response.noContent().build();
}
diff --git a/src/org/traccar/api/resource/EventResource.java b/src/org/traccar/api/resource/EventResource.java
index 0ef5456af..b7fda6f73 100644
--- a/src/org/traccar/api/resource/EventResource.java
+++ b/src/org/traccar/api/resource/EventResource.java
@@ -12,6 +12,7 @@ import javax.ws.rs.core.MediaType;
import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.model.Event;
+import org.traccar.model.Geofence;
@Path("events")
@Produces(MediaType.APPLICATION_JSON)
@@ -25,7 +26,7 @@ public class EventResource extends BaseResource {
Event event = Context.getDataManager().getEvent(id);
Context.getPermissionsManager().checkDevice(getUserId(), event.getDeviceId());
if (event.getGeofenceId() != 0) {
- Context.getPermissionsManager().checkGeofence(getUserId(), event.getGeofenceId());
+ Context.getPermissionsManager().checkPermission(Geofence.class, getUserId(), event.getGeofenceId());
}
return event;
}
diff --git a/src/org/traccar/api/resource/GeofencePermissionResource.java b/src/org/traccar/api/resource/GeofencePermissionResource.java
deleted file mode 100644
index 8faa63d85..000000000
--- a/src/org/traccar/api/resource/GeofencePermissionResource.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2016 Anton Tananaev (anton@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.GeofencePermission;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.sql.SQLException;
-
-@Path("permissions/geofences")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class GeofencePermissionResource extends BaseResource {
-
- @POST
- public Response add(GeofencePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().linkGeofence(entity.getUserId(), entity.getGeofenceId());
- Context.getGeofenceManager().refreshUserGeofences();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(GeofencePermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().unlinkGeofence(entity.getUserId(), entity.getGeofenceId());
- Context.getGeofenceManager().refreshUserGeofences();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/GeofenceResource.java b/src/org/traccar/api/resource/GeofenceResource.java
index d5acf106a..47f889e9c 100644
--- a/src/org/traccar/api/resource/GeofenceResource.java
+++ b/src/org/traccar/api/resource/GeofenceResource.java
@@ -19,6 +19,7 @@ import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.database.GeofenceManager;
import org.traccar.model.Geofence;
+import org.traccar.model.User;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -49,44 +50,44 @@ public class GeofenceResource extends BaseResource {
GeofenceManager geofenceManager = Context.getGeofenceManager();
if (refresh) {
- geofenceManager.refreshGeofences();
+ geofenceManager.refreshItems();
}
Set<Long> result = new HashSet<>();
if (all) {
if (Context.getPermissionsManager().isAdmin(getUserId())) {
- result.addAll(geofenceManager.getAllGeofencesIds());
+ result.addAll(geofenceManager.getAllItems());
} else {
Context.getPermissionsManager().checkManager(getUserId());
- result.addAll(geofenceManager.getManagedGeofencesIds(getUserId()));
+ result.addAll(geofenceManager.getManagedItems(getUserId()));
}
} else {
if (userId == 0) {
userId = getUserId();
}
Context.getPermissionsManager().checkUser(getUserId(), userId);
- result.addAll(geofenceManager.getUserGeofencesIds(userId));
+ result.addAll(geofenceManager.getUserItems(userId));
}
if (groupId != 0) {
Context.getPermissionsManager().checkGroup(getUserId(), groupId);
- result.retainAll(geofenceManager.getGroupGeofencesIds(groupId));
+ result.retainAll(geofenceManager.getGroupItems(groupId));
}
if (deviceId != 0) {
Context.getPermissionsManager().checkDevice(getUserId(), deviceId);
- result.retainAll(geofenceManager.getDeviceGeofencesIds(deviceId));
+ result.retainAll(geofenceManager.getDeviceItems(deviceId));
}
- return geofenceManager.getGeofences(result);
+ return geofenceManager.getItems(Geofence.class, result);
}
@POST
public Response add(Geofence entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getDataManager().addGeofence(entity);
- Context.getDataManager().linkGeofence(getUserId(), entity.getId());
- Context.getGeofenceManager().refreshGeofences();
+ Context.getGeofenceManager().addItem(entity);
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
+ Context.getGeofenceManager().refreshUserItems();
return Response.ok(entity).build();
}
@@ -94,8 +95,8 @@ public class GeofenceResource extends BaseResource {
@PUT
public Response update(Geofence entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getId());
- Context.getGeofenceManager().updateGeofence(entity);
+ Context.getPermissionsManager().checkPermission(Geofence.class, getUserId(), entity.getId());
+ Context.getGeofenceManager().updateItem(entity);
return Response.ok(entity).build();
}
@@ -103,9 +104,8 @@ public class GeofenceResource extends BaseResource {
@DELETE
public Response remove(@PathParam("id") long id) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGeofence(getUserId(), id);
- Context.getDataManager().removeGeofence(id);
- Context.getGeofenceManager().refreshGeofences();
+ Context.getPermissionsManager().checkPermission(Geofence.class, getUserId(), id);
+ Context.getGeofenceManager().removeItem(id);
return Response.noContent().build();
}
diff --git a/src/org/traccar/api/resource/GroupAttributeResource.java b/src/org/traccar/api/resource/GroupAttributeResource.java
deleted file mode 100644
index d8b8b58c9..000000000
--- a/src/org/traccar/api/resource/GroupAttributeResource.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.GroupAttribute;
-
-@Path("groups/attributes")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class GroupAttributeResource extends BaseResource {
-
- @POST
- public Response add(GroupAttribute entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().linkGroupAttribute(entity.getGroupId(), entity.getAttributeId());
- Context.getAttributesManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(GroupAttribute entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkAttribute(getUserId(), entity.getAttributeId());
- Context.getDataManager().unlinkGroupAttribute(entity.getGroupId(), entity.getAttributeId());
- Context.getAttributesManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/GroupDriverResource.java b/src/org/traccar/api/resource/GroupDriverResource.java
deleted file mode 100644
index 76fc2892c..000000000
--- a/src/org/traccar/api/resource/GroupDriverResource.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.GroupDriver;
-
-@Path("groups/drivers")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class GroupDriverResource extends BaseResource {
-
- @POST
- public Response add(GroupDriver entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().linkGroupDriver(entity.getGroupId(), entity.getDriverId());
- Context.getDriversManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(GroupDriver entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkDriver(getUserId(), entity.getDriverId());
- Context.getDataManager().unlinkGroupDriver(entity.getGroupId(), entity.getDriverId());
- Context.getDriversManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/GroupGeofenceResource.java b/src/org/traccar/api/resource/GroupGeofenceResource.java
deleted file mode 100644
index 81fd4e45f..000000000
--- a/src/org/traccar/api/resource/GroupGeofenceResource.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2016 Anton Tananaev (anton@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.GroupGeofence;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.sql.SQLException;
-
-@Path("groups/geofences")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class GroupGeofenceResource extends BaseResource {
-
- @POST
- public Response add(GroupGeofence entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().linkGroupGeofence(entity.getGroupId(), entity.getGeofenceId());
- Context.getGeofenceManager().refresh();
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(GroupGeofence entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getPermissionsManager().checkGeofence(getUserId(), entity.getGeofenceId());
- Context.getDataManager().unlinkGroupGeofence(entity.getGroupId(), entity.getGeofenceId());
- Context.getGeofenceManager().refresh();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/GroupPermissionResource.java b/src/org/traccar/api/resource/GroupPermissionResource.java
deleted file mode 100644
index 61a725222..000000000
--- a/src/org/traccar/api/resource/GroupPermissionResource.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2016 - 2017 Anton Tananaev (anton@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.GroupPermission;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.sql.SQLException;
-
-@Path("permissions/groups")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class GroupPermissionResource extends BaseResource {
-
- @POST
- public Response add(GroupPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getDataManager().linkGroup(entity.getUserId(), entity.getGroupId());
- Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(GroupPermission entity) throws SQLException {
- Context.getPermissionsManager().checkReadonly(getUserId());
- Context.getPermissionsManager().checkUser(getUserId(), entity.getUserId());
- Context.getPermissionsManager().checkGroup(getUserId(), entity.getGroupId());
- Context.getDataManager().unlinkGroup(entity.getUserId(), entity.getGroupId());
- Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/GroupResource.java b/src/org/traccar/api/resource/GroupResource.java
index ceba69105..f20c95327 100644
--- a/src/org/traccar/api/resource/GroupResource.java
+++ b/src/org/traccar/api/resource/GroupResource.java
@@ -18,6 +18,7 @@ package org.traccar.api.resource;
import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.model.Group;
+import org.traccar.model.User;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -61,11 +62,9 @@ public class GroupResource extends BaseResource {
public Response add(Group entity) throws SQLException {
Context.getPermissionsManager().checkReadonly(getUserId());
Context.getDeviceManager().addGroup(entity);
- Context.getDataManager().linkGroup(getUserId(), entity.getId());
+ Context.getDataManager().linkObject(User.class, getUserId(), entity.getClass(), entity.getId(), true);
Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
return Response.ok(entity).build();
}
@@ -75,9 +74,7 @@ public class GroupResource extends BaseResource {
Context.getPermissionsManager().checkReadonly(getUserId());
Context.getPermissionsManager().checkGroup(getUserId(), entity.getId());
Context.getDeviceManager().updateGroup(entity);
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
return Response.ok(entity).build();
}
@@ -88,9 +85,7 @@ public class GroupResource extends BaseResource {
Context.getPermissionsManager().checkGroup(getUserId(), id);
Context.getDeviceManager().removeGroup(id);
Context.getPermissionsManager().refreshPermissions();
- if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refresh();
- }
+ Context.getPermissionsManager().refreshAllExtendedPermissions();
return Response.noContent().build();
}
diff --git a/src/org/traccar/api/resource/PermissionsResource.java b/src/org/traccar/api/resource/PermissionsResource.java
new file mode 100644
index 000000000..9b9f65ad1
--- /dev/null
+++ b/src/org/traccar/api/resource/PermissionsResource.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2017 Anton Tananaev (anton@traccar.org)
+ * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.traccar.api.resource;
+
+import java.sql.SQLException;
+import java.util.LinkedHashMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+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());
+ Permission permission = new Permission(entity);
+ checkPermission(permission, true);
+ Context.getDataManager().linkObject(permission.getOwnerClass(), permission.getOwnerId(),
+ permission.getPropertyClass(), permission.getPropertyId(), true);
+ Context.getPermissionsManager().refreshPermissions(permission);
+ return Response.noContent().build();
+ }
+
+ @DELETE
+ public Response remove(LinkedHashMap<String, Long> entity) 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);
+ Context.getPermissionsManager().refreshPermissions(permission);
+ return Response.noContent().build();
+ }
+
+}
diff --git a/src/org/traccar/api/resource/UserPermissionResource.java b/src/org/traccar/api/resource/UserPermissionResource.java
deleted file mode 100644
index a97c4a665..000000000
--- a/src/org/traccar/api/resource/UserPermissionResource.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2017 Anton Tananaev (anton@traccar.org)
- * Copyright 2017 Andrey Kunitsyn (andrey@traccar.org)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.traccar.api.resource;
-
-import java.sql.SQLException;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.traccar.Context;
-import org.traccar.api.BaseResource;
-import org.traccar.model.UserPermission;
-
-@Path("permissions/users")
-@Produces(MediaType.APPLICATION_JSON)
-@Consumes(MediaType.APPLICATION_JSON)
-public class UserPermissionResource extends BaseResource {
-
- @POST
- public Response add(UserPermission entity) throws SQLException {
- Context.getPermissionsManager().checkAdmin(getUserId());
- if (entity.getUserId() != entity.getManagedUserId()) {
- Context.getDataManager().linkUser(entity.getUserId(), entity.getManagedUserId());
- Context.getPermissionsManager().refreshUserPermissions();
- }
- return Response.ok(entity).build();
- }
-
- @DELETE
- public Response remove(UserPermission entity) throws SQLException {
- Context.getPermissionsManager().checkAdmin(getUserId());
- Context.getDataManager().unlinkUser(entity.getUserId(), entity.getManagedUserId());
- Context.getPermissionsManager().refreshUserPermissions();
- return Response.noContent().build();
- }
-
-}
diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java
index 4d8a8b3a4..98395e3cc 100644
--- a/src/org/traccar/api/resource/UserResource.java
+++ b/src/org/traccar/api/resource/UserResource.java
@@ -17,6 +17,7 @@ package org.traccar.api.resource;
import org.traccar.Context;
import org.traccar.api.BaseResource;
+import org.traccar.model.ManagedUser;
import org.traccar.model.User;
import javax.annotation.security.PermitAll;
@@ -74,7 +75,7 @@ public class UserResource extends BaseResource {
}
Context.getPermissionsManager().addUser(entity);
if (Context.getPermissionsManager().isManager(getUserId())) {
- Context.getDataManager().linkUser(getUserId(), entity.getId());
+ Context.getDataManager().linkObject(User.class, getUserId(), ManagedUser.class, entity.getId(), true);
}
Context.getPermissionsManager().refreshUserPermissions();
if (Context.getNotificationManager() != null) {
@@ -104,7 +105,7 @@ public class UserResource extends BaseResource {
Context.getPermissionsManager().checkUser(getUserId(), id);
Context.getPermissionsManager().removeUser(id);
if (Context.getGeofenceManager() != null) {
- Context.getGeofenceManager().refreshUserGeofences();
+ Context.getGeofenceManager().refreshUserItems();
}
if (Context.getNotificationManager() != null) {
Context.getNotificationManager().refresh();