From d489eac12119ed62f899569db121364b20b1c9dc Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 27 Dec 2017 16:38:13 +0500 Subject: Implement device disable --- src/org/traccar/database/DeviceManager.java | 26 ++++++++++++++++++++++-- src/org/traccar/database/PermissionsManager.java | 23 +++++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) (limited to 'src/org/traccar/database') diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index 1031c5da9..85ee11c40 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -104,15 +104,35 @@ public class DeviceManager extends BaseObjectManager implements Identity return getItems(getAllItems()); } + public Set getAllUserItems(long userId) { + return Context.getPermissionsManager().getDevicePermissions(userId); + } + @Override public Set getUserItems(long userId) { if (Context.getPermissionsManager() != null) { - return Context.getPermissionsManager().getDevicePermissions(userId); + Set result = new HashSet<>(); + for (long deviceId : Context.getPermissionsManager().getDevicePermissions(userId)) { + Device device = Context.getIdentityManager().getById(deviceId); + if (device != null && !device.getDisabled()) { + result.add(deviceId); + } + } + return result; } else { return new HashSet<>(); } } + public Set getAllManagedItems(long userId) { + Set result = new HashSet<>(); + result.addAll(getAllUserItems(userId)); + for (long managedUserId : Context.getUsersManager().getUserItems(userId)) { + result.addAll(getAllUserItems(managedUserId)); + } + return result; + } + @Override public Set getManagedItems(long userId) { Set result = new HashSet<>(); @@ -160,6 +180,7 @@ public class DeviceManager extends BaseObjectManager implements Identity cachedDevice.setCategory(device.getCategory()); cachedDevice.setContact(device.getContact()); cachedDevice.setModel(device.getModel()); + cachedDevice.setDisabled(device.getDisabled()); cachedDevice.setAttributes(device.getAttributes()); if (!device.getUniqueId().equals(cachedDevice.getUniqueId())) { devicesByUniqueId.remove(cachedDevice.getUniqueId()); @@ -246,7 +267,8 @@ public class DeviceManager extends BaseObjectManager implements Identity List result = new LinkedList<>(); if (Context.getPermissionsManager() != null) { - for (long deviceId : getUserItems(userId)) { + for (long deviceId : Context.getPermissionsManager().getUserAdmin(userId) + ? getAllUserItems(userId) : getUserItems(userId)) { if (positions.containsKey(deviceId)) { result.add(positions.get(deviceId)); } diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 0e9097d25..60bda99ce 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -74,13 +74,28 @@ public class PermissionsManager { return devicePermissions.get(userId); } - public Set getDeviceUsers(long deviceId) { + private Set getAllDeviceUsers(long deviceId) { if (!deviceUsers.containsKey(deviceId)) { deviceUsers.put(deviceId, new HashSet()); } return deviceUsers.get(deviceId); } + public Set getDeviceUsers(long deviceId) { + Device device = Context.getIdentityManager().getById(deviceId); + if (device != null && !device.getDisabled()) { + return getAllDeviceUsers(deviceId); + } else { + Set result = new HashSet<>(); + for (long userId : getAllDeviceUsers(deviceId)) { + if (getUserAdmin(userId)) { + result.add(userId); + } + } + return result; + } + } + public Set getGroupDevices(long groupId) { if (!groupDevices.containsKey(groupId)) { groupDevices.put(groupId, new HashSet()); @@ -133,7 +148,7 @@ public class PermissionsManager { deviceUsers.clear(); for (Map.Entry> entry : devicePermissions.entrySet()) { for (long deviceId : entry.getValue()) { - getDeviceUsers(deviceId).add(entry.getKey()); + getAllDeviceUsers(deviceId).add(entry.getKey()); } } } @@ -179,9 +194,9 @@ public class PermissionsManager { if (deviceLimit != -1) { int deviceCount = 0; if (getUserManager(userId)) { - deviceCount = Context.getDeviceManager().getManagedItems(userId).size(); + deviceCount = Context.getDeviceManager().getAllManagedItems(userId).size(); } else { - deviceCount = Context.getDeviceManager().getUserItems(userId).size(); + deviceCount = Context.getDeviceManager().getAllUserItems(userId).size(); } if (deviceCount >= deviceLimit) { throw new SecurityException("User device limit reached"); -- cgit v1.2.3