diff options
Diffstat (limited to 'src/org/traccar/database/PermissionsManager.java')
-rw-r--r-- | src/org/traccar/database/PermissionsManager.java | 23 |
1 files changed, 19 insertions, 4 deletions
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<Long> getDeviceUsers(long deviceId) { + private Set<Long> getAllDeviceUsers(long deviceId) { if (!deviceUsers.containsKey(deviceId)) { deviceUsers.put(deviceId, new HashSet<Long>()); } return deviceUsers.get(deviceId); } + public Set<Long> getDeviceUsers(long deviceId) { + Device device = Context.getIdentityManager().getById(deviceId); + if (device != null && !device.getDisabled()) { + return getAllDeviceUsers(deviceId); + } else { + Set<Long> result = new HashSet<>(); + for (long userId : getAllDeviceUsers(deviceId)) { + if (getUserAdmin(userId)) { + result.add(userId); + } + } + return result; + } + } + public Set<Long> getGroupDevices(long groupId) { if (!groupDevices.containsKey(groupId)) { groupDevices.put(groupId, new HashSet<Long>()); @@ -133,7 +148,7 @@ public class PermissionsManager { deviceUsers.clear(); for (Map.Entry<Long, Set<Long>> 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"); |