109 lines
4.9 KiB
C#
109 lines
4.9 KiB
C#
using AyCode.Database.DataLayers.Users;
|
|
using AyCode.Models.Enums;
|
|
using TIAM.Database.DbContexts;
|
|
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<PermissionGroup> GetPermissionGroupByContextMapping(this ServiceProviderDbContext ctx, PermissionContextMapping permissionContextMapping)
|
|
//{
|
|
// if (permissionContextMapping.SubjectType == PermissionContextMappingSubjectType.Group)
|
|
// return ctx.PermissionGroups.Where(x => x.Id == permissionContextMapping.SubjectId);
|
|
// else if (permissionContextMapping.SubjectType == PermissionContextMappingSubjectType.User)
|
|
// return ctx.PermissionGroups.Where(x => x.Id == permissionContextMapping.SubjectId);
|
|
//}
|
|
|
|
public static IQueryable<PermissionContextMapping> GetPermissionContextMappingByContextId(this ServiceProviderDbContext 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 IQueryable<PermissionContextMapping> GetPermissionContextMappingByAssignedUserId(this ServiceProviderDbContext ctx, Guid assignedUserId)
|
|
//{
|
|
// var subjectIds = ctx.GetAssignedUsersByContextId(assignedUserId).Select(x => x.Id).
|
|
// Concat(ctx.PermissionGroupUserMappings.Where(x => x.AssignedUserId == assignedUserId).Select(x => x.)).ToHashSet();
|
|
|
|
// return ctx.GetPermissionContextMappingsBySubjectIds(subjectIds);
|
|
//}
|
|
|
|
public static IQueryable<PermissionContextMapping> GetPermissionContextMappingsBySubjectIds(this ServiceProviderDbContext ctx, IEnumerable<Guid> subjectIds)
|
|
=> ctx.PermissionContextMappings.Where(x => subjectIds.Contains(x.SubjectId));
|
|
|
|
public static PermissionContextMapping? GetPermissionContextMappingBySubjectId(this ServiceProviderDbContext ctx, Guid subjectId)
|
|
=> ctx.PermissionContextMappings.FirstOrDefault(x => x.SubjectId == subjectId);
|
|
|
|
public static void RemoveContextMappingBySubjectId(this ServiceProviderDbContext ctx, Guid subjectId)
|
|
{
|
|
var contextMapping = ctx.GetPermissionContextMappingBySubjectId(subjectId);
|
|
|
|
if (contextMapping == null) return;
|
|
|
|
ctx.PermissionContextMappings.Remove(contextMapping);
|
|
}
|
|
|
|
public static IQueryable<PermissionGroupUserMapping> GetAllPermissionGroupsByAssignedUserId(this ServiceProviderDbContext ctx, Guid assignedUserId)
|
|
=> ctx.PermissionGroupUserMappings.Where(x => x.AssignedUserId == assignedUserId);
|
|
|
|
public static void DeleteProductById(this ServiceProviderDbContext ctx, Guid productId)
|
|
{
|
|
var product = ctx.Products.FirstOrDefault(u => u.Id == productId);
|
|
if (product == null) return;
|
|
|
|
ctx.RemoveAssignedUsers(ctx.GetAssignedUsersByContextId(productId));
|
|
ctx.Products.Remove(product);
|
|
}
|
|
|
|
public static void RemoveAssingedUserFromPermissionGroups(this ServiceProviderDbContext ctx, Guid assignedUserId)
|
|
{
|
|
ctx.PermissionGroupUserMappings.RemoveRange(ctx.GetAllPermissionGroupsByAssignedUserId(assignedUserId));
|
|
}
|
|
|
|
public static void RemoveAssignedUsers(this ServiceProviderDbContext ctx, IEnumerable<AssignedUser> assignedUsers)
|
|
{
|
|
foreach (var assignedUser in assignedUsers)
|
|
{
|
|
ctx.CleanUpAndRemoveAssignedUser(assignedUser);
|
|
}
|
|
}
|
|
|
|
public static void CleanUpAndRemoveAssignedUser(this ServiceProviderDbContext ctx, AssignedUser assignedUser)
|
|
{
|
|
ctx.RemoveContextMappingBySubjectId(assignedUser.Id);
|
|
ctx.RemoveAssingedUserFromPermissionGroups(assignedUser.Id);
|
|
|
|
ctx.AssignedUsers.Remove(assignedUser);
|
|
}
|
|
|
|
public static bool RemoveAssignedUserById(this ServiceProviderDbContext ctx, Guid assignedUserId)
|
|
{
|
|
var assignedUser = ctx.GetAssignedUserById(assignedUserId);
|
|
|
|
if (assignedUser == null) return false;
|
|
|
|
ctx.CleanUpAndRemoveAssignedUser(assignedUser);
|
|
|
|
return true;
|
|
}
|
|
|
|
public static AssignedUser? GetAssignedUserById(this ServiceProviderDbContext ctx, Guid assignedUserId)
|
|
=> ctx.AssignedUsers.FirstOrDefault(x => x.Id == assignedUserId);
|
|
|
|
public static IQueryable<AssignedUser> GetAssignedUsersByContextId(this ServiceProviderDbContext ctx, Guid contextId)
|
|
=> ctx.AssignedUsers.Where(x => x.ContextId == contextId);
|
|
|
|
} |