more auth and database stuff
This commit is contained in:
parent
11367e7ccc
commit
a5d60cf2ca
@ -24,15 +24,15 @@ public class HasAccessToClientValidator : AbstractValidator<long>
|
||||
.SetValidator(new DbEntityExistValidator<Client, long>(dbContext))
|
||||
.CustomAsync(async (clientId, validationContext, cancellationToken) =>
|
||||
{
|
||||
var organizationClient = await _dbContext.OrganizationClients
|
||||
var client = await _dbContext.Clients
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(organizationClient => organizationClient.ClientId == clientId, cancellationToken);
|
||||
.FirstOrDefaultAsync(client => client.Id == clientId, cancellationToken);
|
||||
|
||||
if (organizationClient is null)
|
||||
if (client is null)
|
||||
return;
|
||||
|
||||
var validation = new HasAccessToOrganizationValidator(_role, _dbContext, _userIdentityService);
|
||||
var validationResult = validation.Validate(organizationClient.OrganizationId);
|
||||
var validationResult = validation.Validate(client.OrganizationId);
|
||||
|
||||
if (!validationResult.IsValid)
|
||||
foreach (var error in validationResult.Errors)
|
||||
|
@ -13,7 +13,6 @@ public class ClientParams
|
||||
public class ClientItem
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public IEnumerable<long> OrganizationIds { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
@ -39,18 +38,14 @@ public class ClientQueryableProvider(MainDbContext dbContext, UserIdentityServic
|
||||
|
||||
var user = await userIdentityService.GetUserOrDefaultAsync(cancellationToken);
|
||||
|
||||
var queryable = dbContext.Clients
|
||||
.AsNoTracking();
|
||||
|
||||
var result = dbContext.Clients
|
||||
.AsNoTracking()
|
||||
.Where(client => client.OrganizationClients.Any(organizationClient => organizationClient.OrganizationId == organizationId))
|
||||
.Where(client => client.OrganizationId == organizationId)
|
||||
.Where(client =>
|
||||
client.OrganizationClients.Any(organizationClient => organizationClient.Organization.OrganizationUsers.Any(organizationUser => organizationUser.UserId == user!.Id)))
|
||||
client.Organization.OrganizationUsers.Any(organizationClient => organizationClient.Organization.OrganizationUsers.Any(organizationUser => organizationUser.UserId == user!.Id)))
|
||||
.Select(client => new ClientItem
|
||||
{
|
||||
Id = client.Id,
|
||||
OrganizationIds = client.OrganizationClients.Select(organizationClient => organizationClient.OrganizationId),
|
||||
Name = client.Name,
|
||||
CreatedAt = client.CreatedAt,
|
||||
UpdatedAt = client.UpdatedAt
|
||||
|
@ -55,7 +55,8 @@ public class ProjectQueryableProvider(MainDbContext dbContext, UserIdentityServi
|
||||
}
|
||||
|
||||
queryable = queryable
|
||||
.Where(project => project.Client.OrganizationClients.Any(organizationClient =>
|
||||
.Where(project => project.Client.OrganizationId == organizationId)
|
||||
.Where(project => project.Client.Organization.OrganizationUsers.Any(organizationClient =>
|
||||
organizationClient.OrganizationId == organizationUser!.OrganizationId));
|
||||
|
||||
var result = queryable.Select(project => new ProjectItem
|
||||
|
@ -21,16 +21,11 @@ public class ClientService(MainDbContext dbContext, UserIdentityService userIden
|
||||
|
||||
var client = new Dal.DbEntity.Client
|
||||
{
|
||||
Name = options.Name
|
||||
};
|
||||
|
||||
var organizationClient = new OrganizationClient
|
||||
{
|
||||
Organization = organization,
|
||||
Client = client
|
||||
Name = options.Name,
|
||||
Organization = organization
|
||||
};
|
||||
|
||||
organization.OrganizationClients.Add(organizationClient);
|
||||
organization.Clients.Add(client);
|
||||
await dbContext.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
}
|
@ -7,13 +7,15 @@ public partial class Client
|
||||
{
|
||||
public long Id { get; set; }
|
||||
|
||||
public long OrganizationId { get; set; }
|
||||
|
||||
public string Name { get; set; } = null!;
|
||||
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
|
||||
public virtual ICollection<OrganizationClient> OrganizationClients { get; set; } = new List<OrganizationClient>();
|
||||
public virtual Organization Organization { get; set; } = null!;
|
||||
|
||||
public virtual ICollection<Project> Projects { get; set; } = new List<Project>();
|
||||
}
|
||||
|
@ -13,9 +13,9 @@ public partial class Organization
|
||||
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
|
||||
public virtual ICollection<OidcProvider> OidcProviders { get; set; } = new List<OidcProvider>();
|
||||
public virtual ICollection<Client> Clients { get; set; } = new List<Client>();
|
||||
|
||||
public virtual ICollection<OrganizationClient> OrganizationClients { get; set; } = new List<OrganizationClient>();
|
||||
public virtual ICollection<OidcProvider> OidcProviders { get; set; } = new List<OidcProvider>();
|
||||
|
||||
public virtual ICollection<OrganizationUser> OrganizationUsers { get; set; } = new List<OrganizationUser>();
|
||||
}
|
||||
|
@ -1,21 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DigitalOps.Dal.DbEntity;
|
||||
|
||||
public partial class OrganizationClient
|
||||
{
|
||||
public long Id { get; set; }
|
||||
|
||||
public long OrganizationId { get; set; }
|
||||
|
||||
public long ClientId { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
public DateTime? UpdatedAt { get; set; }
|
||||
|
||||
public virtual Client Client { get; set; } = null!;
|
||||
|
||||
public virtual Organization Organization { get; set; } = null!;
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
using DigitalOps.Dal.DbEntity;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using DigitalOps.Dal.DbEntity;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DigitalOps.Dal;
|
||||
@ -20,8 +22,6 @@ public partial class MainDbScaffoldedContext : DbContext
|
||||
|
||||
public virtual DbSet<Organization> Organizations { get; set; }
|
||||
|
||||
public virtual DbSet<OrganizationClient> OrganizationClients { get; set; }
|
||||
|
||||
public virtual DbSet<OrganizationUser> OrganizationUsers { get; set; }
|
||||
|
||||
public virtual DbSet<Project> Projects { get; set; }
|
||||
@ -52,7 +52,13 @@ public partial class MainDbScaffoldedContext : DbContext
|
||||
entity.Property(e => e.Name)
|
||||
.HasMaxLength(255)
|
||||
.HasColumnName("name");
|
||||
entity.Property(e => e.OrganizationId).HasColumnName("organization_id");
|
||||
entity.Property(e => e.UpdatedAt).HasColumnName("updated_at");
|
||||
|
||||
entity.HasOne(d => d.Organization).WithMany(p => p.Clients)
|
||||
.HasForeignKey(d => d.OrganizationId)
|
||||
.OnDelete(DeleteBehavior.ClientSetNull)
|
||||
.HasConstraintName("client_organization_id_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<OidcProvider>(entity =>
|
||||
@ -96,31 +102,6 @@ public partial class MainDbScaffoldedContext : DbContext
|
||||
entity.Property(e => e.UpdatedAt).HasColumnName("updated_at");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<OrganizationClient>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("organization_client_pkey");
|
||||
|
||||
entity.ToTable("organization_client");
|
||||
|
||||
entity.Property(e => e.Id).HasColumnName("id");
|
||||
entity.Property(e => e.ClientId).HasColumnName("client_id");
|
||||
entity.Property(e => e.CreatedAt)
|
||||
.HasDefaultValueSql("(CURRENT_TIMESTAMP AT TIME ZONE 'UTC'::text)")
|
||||
.HasColumnName("created_at");
|
||||
entity.Property(e => e.OrganizationId).HasColumnName("organization_id");
|
||||
entity.Property(e => e.UpdatedAt).HasColumnName("updated_at");
|
||||
|
||||
entity.HasOne(d => d.Client).WithMany(p => p.OrganizationClients)
|
||||
.HasForeignKey(d => d.ClientId)
|
||||
.OnDelete(DeleteBehavior.ClientSetNull)
|
||||
.HasConstraintName("organization_client_client_id_fkey");
|
||||
|
||||
entity.HasOne(d => d.Organization).WithMany(p => p.OrganizationClients)
|
||||
.HasForeignKey(d => d.OrganizationId)
|
||||
.OnDelete(DeleteBehavior.ClientSetNull)
|
||||
.HasConstraintName("organization_client_organization_id_fkey");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<OrganizationUser>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id).HasName("organization_user_pkey");
|
||||
|
Loading…
Reference in New Issue
Block a user