using TIAM.Database.DbContexts.ServiceProviders; using TIAM.Database.DbSets.Users; using TIAM.Entities.Permissions; namespace TIAM.Database.DbSets.Permissions; public static class PermissionsDbSetExtensions { //public static IQueryable GetPermissionGroupByContextMapping(this IPermissionsDbSetContext 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 GetPermissionContextMappingByAssignedUserId(this IPermissionsDbSetContext 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 GetPermissionContextMappingsBySubjectIds(this IPermissionsDbSetContext ctx, IEnumerable subjectIds) => ctx.PermissionContextMappings.Where(x => subjectIds.Contains(x.SubjectId)); public static PermissionContextMapping? GetPermissionContextMappingBySubjectId(this IPermissionsDbSetContext ctx, Guid subjectId) => ctx.PermissionContextMappings.FirstOrDefault(x => x.SubjectId == subjectId); public static void RemoveContextMappingBySubjectId(this IPermissionsDbSetContext ctx, Guid subjectId) { var contextMapping = ctx.GetPermissionContextMappingBySubjectId(subjectId); if (contextMapping == null) return; ctx.PermissionContextMappings.Remove(contextMapping); } public static IQueryable GetAllPermissionGroupsByAssignedUserId(this IPermissionsDbSetContext ctx, Guid assignedUserId) => ctx.PermissionGroupUserMappings.Where(x => x.SubjectId == assignedUserId); public static void RemoveAssingedUserFromPermissionGroups(this IPermissionsDbSetContext ctx, Guid assignedUserId) => ctx.PermissionGroupUserMappings.RemoveRange(ctx.GetAllPermissionGroupsByAssignedUserId(assignedUserId)); }