aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-06-16 07:18:33 -0700
committerAnton Tananaev <anton@traccar.org>2022-06-16 07:18:33 -0700
commitcc342a9ba371b0dca8d87ca9e74c5907ccb58bc6 (patch)
tree6d0354e4a357eb314eeaad044ad9591f9f98f867
parentd3e83f9fa0d066e5a15fde225599cc43071c031a (diff)
downloadtrackermap-server-cc342a9ba371b0dca8d87ca9e74c5907ccb58bc6.tar.gz
trackermap-server-cc342a9ba371b0dca8d87ca9e74c5907ccb58bc6.tar.bz2
trackermap-server-cc342a9ba371b0dca8d87ca9e74c5907ccb58bc6.zip
Permissions manager refactor
-rw-r--r--src/main/java/org/traccar/api/resource/PermissionsResource.java5
-rw-r--r--src/main/java/org/traccar/api/resource/ServerResource.java4
-rw-r--r--src/main/java/org/traccar/database/DeviceManager.java2
-rw-r--r--src/main/java/org/traccar/database/PermissionsManager.java27
-rw-r--r--src/main/java/org/traccar/session/ConnectionManager.java14
5 files changed, 12 insertions, 40 deletions
diff --git a/src/main/java/org/traccar/api/resource/PermissionsResource.java b/src/main/java/org/traccar/api/resource/PermissionsResource.java
index 36ee0c213..b92e6e9d9 100644
--- a/src/main/java/org/traccar/api/resource/PermissionsResource.java
+++ b/src/main/java/org/traccar/api/resource/PermissionsResource.java
@@ -20,6 +20,7 @@ import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.helper.LogAction;
import org.traccar.model.Permission;
+import org.traccar.model.UserRestrictions;
import org.traccar.session.cache.CacheManager;
import org.traccar.storage.StorageException;
@@ -65,7 +66,7 @@ public class PermissionsResource extends BaseResource {
@Path("bulk")
@POST
public Response add(List<LinkedHashMap<String, Long>> entities) throws StorageException, ClassNotFoundException {
- Context.getPermissionsManager().checkReadonly(getUserId());
+ permissionsService.checkRestriction(getUserId(), UserRestrictions::getReadonly);
checkPermissionTypes(entities);
for (LinkedHashMap<String, Long> entity: entities) {
Permission permission = new Permission(entity);
@@ -90,7 +91,7 @@ public class PermissionsResource extends BaseResource {
@DELETE
@Path("bulk")
public Response remove(List<LinkedHashMap<String, Long>> entities) throws StorageException, ClassNotFoundException {
- Context.getPermissionsManager().checkReadonly(getUserId());
+ permissionsService.checkRestriction(getUserId(), UserRestrictions::getReadonly);
checkPermissionTypes(entities);
for (LinkedHashMap<String, Long> entity: entities) {
Permission permission = new Permission(entity);
diff --git a/src/main/java/org/traccar/api/resource/ServerResource.java b/src/main/java/org/traccar/api/resource/ServerResource.java
index 18230a2b3..b66f5a931 100644
--- a/src/main/java/org/traccar/api/resource/ServerResource.java
+++ b/src/main/java/org/traccar/api/resource/ServerResource.java
@@ -15,7 +15,6 @@
*/
package org.traccar.api.resource;
-import org.traccar.Context;
import org.traccar.api.BaseResource;
import org.traccar.database.MailManager;
import org.traccar.geocoder.Geocoder;
@@ -66,8 +65,7 @@ public class ServerResource extends BaseResource {
@PUT
public Response update(Server entity) throws StorageException {
- Context.getPermissionsManager().checkAdmin(getUserId());
- Context.getPermissionsManager().updateServer(entity);
+ permissionsService.checkAdmin(getUserId());
LogAction.edit(getUserId(), entity);
return Response.ok(entity).build();
}
diff --git a/src/main/java/org/traccar/database/DeviceManager.java b/src/main/java/org/traccar/database/DeviceManager.java
index 29c17c41f..bd100245c 100644
--- a/src/main/java/org/traccar/database/DeviceManager.java
+++ b/src/main/java/org/traccar/database/DeviceManager.java
@@ -368,7 +368,7 @@ public class DeviceManager extends BaseObjectManager<Device> implements Identity
}
}
if (result == null && lookupServer) {
- Server server = Context.getPermissionsManager().getServer();
+ Server server = cacheManager.getServer();
result = server.getAttributes().get(attributeName);
}
if (result == null && lookupConfig) {
diff --git a/src/main/java/org/traccar/database/PermissionsManager.java b/src/main/java/org/traccar/database/PermissionsManager.java
index 595e236fa..3d4e6425a 100644
--- a/src/main/java/org/traccar/database/PermissionsManager.java
+++ b/src/main/java/org/traccar/database/PermissionsManager.java
@@ -22,7 +22,6 @@ import org.traccar.api.security.PermissionsService;
import org.traccar.model.Device;
import org.traccar.model.Group;
import org.traccar.model.Permission;
-import org.traccar.model.Server;
import org.traccar.model.User;
import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
@@ -44,8 +43,6 @@ public class PermissionsManager {
private final DataManager dataManager;
private final Storage storage;
- private volatile Server server;
-
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final Map<Long, Set<Long>> groupPermissions = new HashMap<>();
@@ -56,7 +53,6 @@ public class PermissionsManager {
public PermissionsManager(DataManager dataManager, Storage storage) {
this.dataManager = dataManager;
this.storage = storage;
- refreshServer();
refreshDeviceAndGroupPermissions();
}
@@ -148,14 +144,6 @@ public class PermissionsManager {
}
}
- public void refreshServer() {
- try {
- server = dataManager.getServer();
- } catch (StorageException error) {
- LOGGER.warn("Refresh server config error", error);
- }
- }
-
public final void refreshDeviceAndGroupPermissions() {
writeLock();
try {
@@ -229,12 +217,6 @@ public class PermissionsManager {
return user != null && user.getReadonly();
}
- public void checkReadonly(long userId) throws SecurityException {
- if (!getUserAdmin(userId) && (server.getReadonly() || getUserReadonly(userId))) {
- throw new SecurityException("Account is readonly");
- }
- }
-
public void checkUserEnabled(long userId) throws SecurityException {
User user = getUser(userId);
if (user == null) {
@@ -265,15 +247,6 @@ public class PermissionsManager {
}
}
- public Server getServer() {
- return server;
- }
-
- public void updateServer(Server server) throws StorageException {
- dataManager.updateObject(server);
- this.server = server;
- }
-
public User login(String email, String password) throws StorageException {
User user = dataManager.login(email, password);
if (user != null) {
diff --git a/src/main/java/org/traccar/session/ConnectionManager.java b/src/main/java/org/traccar/session/ConnectionManager.java
index dc714379b..c8c07f9c7 100644
--- a/src/main/java/org/traccar/session/ConnectionManager.java
+++ b/src/main/java/org/traccar/session/ConnectionManager.java
@@ -31,6 +31,7 @@ import org.traccar.handler.events.OverspeedEventHandler;
import org.traccar.model.Device;
import org.traccar.model.Event;
import org.traccar.model.Position;
+import org.traccar.model.User;
import org.traccar.session.cache.CacheManager;
import org.traccar.storage.Storage;
import org.traccar.storage.StorageException;
@@ -297,9 +298,9 @@ public class ConnectionManager {
}
public synchronized void updateDevice(Device device) {
- for (long userId : Context.getPermissionsManager().getDeviceUsers(device.getId())) {
- if (listeners.containsKey(userId)) {
- for (UpdateListener listener : listeners.get(userId)) {
+ for (User user : cacheManager.getDeviceObjects(device.getId(), User.class)) {
+ if (listeners.containsKey(user.getId())) {
+ for (UpdateListener listener : listeners.get(user.getId())) {
listener.onUpdateDevice(device);
}
}
@@ -308,10 +309,9 @@ public class ConnectionManager {
public synchronized void updatePosition(Position position) {
long deviceId = position.getDeviceId();
-
- for (long userId : Context.getPermissionsManager().getDeviceUsers(deviceId)) {
- if (listeners.containsKey(userId)) {
- for (UpdateListener listener : listeners.get(userId)) {
+ for (User user : cacheManager.getDeviceObjects(deviceId, User.class)) {
+ if (listeners.containsKey(user.getId())) {
+ for (UpdateListener listener : listeners.get(user.getId())) {
listener.onUpdatePosition(position);
}
}