65 lines
2.4 KiB
C#
65 lines
2.4 KiB
C#
using AyCode.Database.DataLayers.Users;
|
|
using AyCode.Models.Enums;
|
|
using TIAM.Database.DbContexts.ServiceProviders;
|
|
using TIAM.Database.DbSets.Permissions;
|
|
using TIAM.Database.DbSets.Users;
|
|
using TIAM.Entities.Permissions;
|
|
using TIAM.Entities.Users;
|
|
|
|
namespace TIAM.Database.DataLayers.ServiceProviders;
|
|
|
|
public static class ServiceProviderDalExtension
|
|
{
|
|
public static IQueryable<AssignedUser> GetAssignedUsersByPermissionGroupId(this ServiceProviderDbContext ctx, Guid permissionGroupId)
|
|
{
|
|
return ctx.AssignedUsers
|
|
.Where(user => ctx.PermissionGroupUserMappings
|
|
.Where(x => x.PermissionGroupId == permissionGroupId)
|
|
.Select(x => x.AssignedUserId)
|
|
.Contains(user.Id));
|
|
}
|
|
|
|
public static IQueryable<PermissionContextMapping> GetPermissionContextMappingByContextId(this IServiceProviderDbContext ctx, Guid contextId)
|
|
{
|
|
var subjectIds = ctx.GetAssignedUsersByContextId(contextId).Select(x => x.Id).
|
|
Concat(ctx.PermissionGroups.Where(x => x.ContextId == contextId).Select(x => x.Id)).ToHashSet();
|
|
|
|
return ctx.GetPermissionContextMappingsBySubjectIds(subjectIds);
|
|
}
|
|
|
|
public static void DeleteProductById(this IServiceProviderDbContext ctx, Guid productId)
|
|
{
|
|
var product = ctx.Products.FirstOrDefault(u => u.Id == productId);
|
|
if (product == null) return;
|
|
|
|
ctx.CleanUpAndRemoveAssignedUsers(ctx.GetAssignedUsersByContextId(productId));
|
|
ctx.Products.Remove(product);
|
|
}
|
|
|
|
public static void CleanUpAndRemoveAssignedUsers(this IServiceProviderDbContext ctx, IEnumerable<AssignedUser> assignedUsers)
|
|
{
|
|
foreach (var assignedUser in assignedUsers)
|
|
{
|
|
ctx.CleanUpAndRemoveAssignedUser(assignedUser);
|
|
}
|
|
}
|
|
|
|
public static void CleanUpAndRemoveAssignedUser(this IServiceProviderDbContext ctx, AssignedUser assignedUser)
|
|
{
|
|
ctx.RemoveContextMappingBySubjectId(assignedUser.Id);
|
|
ctx.RemoveAssingedUserFromPermissionGroups(assignedUser.Id);
|
|
|
|
ctx.AssignedUsers.Remove(assignedUser);
|
|
}
|
|
|
|
public static bool CleanUpAndRemoveAssignedUsers(this IServiceProviderDbContext ctx, Guid assignedUserId)
|
|
{
|
|
var assignedUser = ctx.GetAssignedUserById(assignedUserId);
|
|
|
|
if (assignedUser == null) return false;
|
|
|
|
ctx.CleanUpAndRemoveAssignedUser(assignedUser);
|
|
|
|
return true;
|
|
}
|
|
} |