From 2b93bae58a97f2fce8b5d4e866acbc844ad8a5a2 Mon Sep 17 00:00:00 2001 From: Jared Date: Fri, 4 Dec 2020 12:33:36 -0800 Subject: [PATCH] Fix device filtering. --- Server/Services/DataService.cs | 37 ++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Server/Services/DataService.cs b/Server/Services/DataService.cs index c47fc0c5..bce1edb7 100644 --- a/Server/Services/DataService.cs +++ b/Server/Services/DataService.cs @@ -580,7 +580,7 @@ namespace Remotely.Server.Services device.ID == deviceID && ( remotelyUser.IsAdministrator || - device.DeviceGroup.PermissionLinks.Count == 0 || + string.IsNullOrWhiteSpace(device.DeviceGroupID) || device.DeviceGroup.PermissionLinks.Any(permission => permission.UserID == remotelyUser.Id ))); } @@ -616,18 +616,24 @@ namespace Remotely.Server.Services .ThenInclude(x => x.PermissionLinks) .FirstOrDefault(x => x.ID == deviceID); - var allowedUsers = device?.DeviceGroup?.PermissionLinks?.Select(x => x.UserID) ?? Array.Empty(); - - return RemotelyContext.Users - .Include(x => x.PermissionLinks) + var orgUsers = RemotelyContext.Users .Where(user => user.OrganizationID == device.OrganizationID && - userIDs.Contains(user.Id) && - ( - user.IsAdministrator || - allowedUsers.Any() || - allowedUsers.Contains(user.Id) - ) + userIDs.Contains(user.Id)); + + if (string.IsNullOrWhiteSpace(device.DeviceGroupID)) + { + return orgUsers + .Select(x => x.Id) + .ToArray(); + } + + var allowedUsers = device?.DeviceGroup?.PermissionLinks?.Select(x => x.UserID) ?? Array.Empty(); + + return orgUsers + .Where(user => + user.IsAdministrator || + allowedUsers.Contains(user.Id) ) .Select(x => x.Id) .ToArray(); @@ -748,6 +754,7 @@ namespace Remotely.Server.Services { return null; } + var userId = user.Id; return RemotelyContext.DeviceGroups .Include(x => x.PermissionLinks) @@ -757,7 +764,7 @@ namespace Remotely.Server.Services ( user.IsAdministrator || x.PermissionLinks.Count == 0 || - x.PermissionLinks.Any(x => x.UserID == user.Id) + x.PermissionLinks.Any(x => x.UserID == userId) ) ) .OrderBy(x => x.Name) ?? Enumerable.Empty(); @@ -780,9 +787,9 @@ namespace Remotely.Server.Services x.OrganizationID == user.OrganizationID && ( user.IsAdministrator || - x.DeviceGroup.PermissionLinks.Count == 0 || - x.DeviceGroup.PermissionLinks.Any(permission => permission.UserID == userID - ))); + string.IsNullOrWhiteSpace(x.DeviceGroupID)|| + x.DeviceGroup.PermissionLinks.Any(permission => permission.UserID == userID) + )); } public IEnumerable GetEventLogs(string userName, DateTimeOffset from, DateTimeOffset to, EventType? type, string message)