50399f4f48
Managed Group references (and subscriptions) continued to exist after Device Profiles, Device Batches and Document Templates were deleted. This prevented assigning the same group to another Profile/Batch/Template without first recycling the IIS App Pool.
41 lines
1.3 KiB
C#
41 lines
1.3 KiB
C#
using Disco.Data.Repository;
|
|
using Disco.Models.Repository;
|
|
using Disco.Services.Authorization;
|
|
using Disco.Services.Devices.ManagedGroups;
|
|
using Disco.Services.Interop.ActiveDirectory;
|
|
using Disco.Services.Users;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace Disco.BI.Extensions
|
|
{
|
|
public static class DeviceBatchExtensions
|
|
{
|
|
public static bool CanDelete(this DeviceBatch db, DiscoDataContext Database)
|
|
{
|
|
if (!UserService.CurrentAuthorization.Has(Claims.Config.DeviceBatch.Delete))
|
|
return false;
|
|
|
|
// Can't Delete if Contains Devices
|
|
var deviceCount = Database.Devices.Count(d => d.DeviceBatchId == db.Id);
|
|
if (deviceCount > 0)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
public static void Delete(this DeviceBatch db, DiscoDataContext Database)
|
|
{
|
|
if (!db.CanDelete(Database))
|
|
throw new InvalidOperationException("The state of this Device Batch doesn't allow it to be deleted");
|
|
|
|
// Remove Linked Group
|
|
ActiveDirectory.Context.ManagedGroups.Remove(DeviceBatchDevicesManagedGroup.GetKey(db));
|
|
ActiveDirectory.Context.ManagedGroups.Remove(DeviceBatchAssignedUsersManagedGroup.GetKey(db));
|
|
|
|
// Delete Batch
|
|
Database.DeviceBatches.Remove(db);
|
|
}
|
|
}
|
|
}
|