Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
188 commits
Select commit Hold shift + click to select a range
5f9c3a5
Merge pull request #1 from LINServices/net8
AlexGBravo Nov 20, 2023
3926c21
Correccion del README
AlexGBravo Nov 20, 2023
823e33e
Mejoras de comentarios
AlexGBravo Nov 20, 2023
826469a
Mejoras de comentarios
AlexGBravo Nov 20, 2023
a81abf3
Comentarios de codigo
AlexGBravo Nov 21, 2023
c354bd8
Mejoras
AlexGBravo Nov 22, 2023
1fe5335
Cambios en la ruta de Mails
AlexGBravo Nov 23, 2023
254b8ac
Mejoras de calidad de comentarios
AlexGBravo Nov 23, 2023
94ffd2f
Mejoras de seguridad y rendimiento
AlexGBravo Nov 23, 2023
29ff889
Cambio de rutas en Orgs -> Organizations
AlexGBravo Nov 23, 2023
e8176f4
Area de autenticación
AlexGBravo Nov 23, 2023
7518152
Mejoras de Intents
AlexGBravo Nov 23, 2023
e78c007
Cambio de rutas de ApplicationsController
AlexGBravo Nov 23, 2023
d93c676
Mejoras de Areas
AlexGBravo Nov 23, 2023
00ae587
Finalizacion de areas
AlexGBravo Nov 23, 2023
7952925
Version 3 de controladores
AlexGBravo Dec 5, 2023
71f92a1
Identity V3
AlexGBravo Dec 6, 2023
4c1b882
Integrantes de organizacion en directorio humano
AlexGBravo Dec 7, 2023
01b35ca
Mejoras en Validation.Account
AlexGBravo Dec 7, 2023
6cb01e8
Mejoras en Data.Mails
AlexGBravo Dec 7, 2023
41b50a0
Mejoras en Data.Logins
AlexGBravo Dec 7, 2023
b1570ab
Mejoras en Applications Data
AlexGBravo Dec 7, 2023
3dde94e
Mejoras en Directory Data
AlexGBravo Dec 7, 2023
5fbb045
Mejoras de comentarios
AlexGBravo Dec 7, 2023
27af83d
Mejoras de comentarios
AlexGBravo Dec 7, 2023
8948e19
Mejoras en la validacion de parametros en Accounts
AlexGBravo Dec 7, 2023
d47172e
Mejoras en la validacion de parametros en Authentication
AlexGBravo Dec 7, 2023
bbdc5a3
Mejoras
AlexGBravo Dec 8, 2023
c26b6c0
Data Directory Mejoradp
AlexGBravo Dec 8, 2023
42c6ac0
IAM Applications -> IAM V2
AlexGBravo Dec 8, 2023
3422a88
Allow To
AlexGBravo Dec 8, 2023
2ca8df5
mejoras
AlexGBravo Dec 8, 2023
c1aada6
Actualizar la contraseña
AlexGBravo Dec 8, 2023
48c053b
Eliminacion de elementos no usados
AlexGBravo Dec 8, 2023
81a7c25
Mejoras
AlexGBravo Dec 8, 2023
b637f63
Loginlog controller
AlexGBravo Dec 9, 2023
ed3d3ad
Mejoras
AlexGBravo Dec 9, 2023
39bfcc0
Mejoras con Directory
AlexGBravo Dec 9, 2023
206a8b5
Tabla de politicas
AlexGBravo Dec 9, 2023
07d89f3
Politicas DATA
AlexGBravo Dec 9, 2023
315f651
Comprobar politicas de contraseña
AlexGBravo Dec 9, 2023
698bfdf
Mejoras
AlexGBravo Dec 9, 2023
2670869
Soluciones
AlexGBravo Dec 10, 2023
d7a5275
Tests
AlexGBravo Dec 11, 2023
383e1b4
Solucion de error al validar politicas externas al directorios de pri…
AlexGBravo Dec 11, 2023
9f6edd6
Policy Controller
AlexGBravo Dec 13, 2023
4c576a8
Identidad en el token
AlexGBravo Dec 13, 2023
b7d9833
Validacion Iam en directorios
AlexGBravo Dec 13, 2023
eec40dd
actualizacion en controller de Policy
AlexGBravo Dec 13, 2023
97e258d
Correccion en DirectoryController
AlexGBravo Dec 14, 2023
4a356fc
Solucion de errores
AlexGBravo Dec 14, 2023
32739d8
Validacion Iam en obtener un directorio.
AlexGBravo Dec 14, 2023
99a4564
Correcciones
AlexGBravo Dec 14, 2023
e6d943e
Nueva ruta
AlexGBravo Dec 14, 2023
8b35361
Mejoras
AlexGBravo Dec 14, 2023
41e3e73
Compatibilidad con Linux
AlexGBravo Dec 15, 2023
d57d04e
Solucion de error en controlador
AlexGBravo Dec 15, 2023
4943765
Mejoras
AlexGBravo Dec 16, 2023
46dfb62
Mejoras de seguridad
AlexGBravo Dec 18, 2023
4b859cc
Mejoras
AlexGBravo Dec 25, 2023
2d75889
Integraciones
AlexGBravo Dec 26, 2023
63f8059
Mejoras con C# 12
AlexGBravo Dec 26, 2023
9fc1977
Mejoras
AlexGBravo Dec 26, 2023
e736bd0
Integracion con filtro de seguridad Auth
AlexGBravo Dec 27, 2023
b38441f
Seguridad
AlexGBravo Dec 27, 2023
a85f1c8
Mejoras en los middlewares
AlexGBravo Dec 27, 2023
ed0b920
Mejoras en Data
AlexGBravo Dec 28, 2023
cfa889b
-> LIN.Cloud.Identity
AlexGBravo Feb 10, 2024
74f6e94
Mejoras con .NET 8 y caracteristicas
AlexGBravo Feb 19, 2024
93ce942
Mejoras
AlexGBravo Mar 13, 2024
c5327f7
Pequeños cambios
AlexGBravo Mar 15, 2024
9cc20ea
Mejoras
AlexGBravo Mar 29, 2024
101ffcd
Mejoras
AlexGBravo Apr 2, 2024
e96184e
Correcciones
AlexGBravo Apr 2, 2024
bd7540a
Licencia de software
AlexGBravo Apr 11, 2024
3575274
Actualización de dependencias
AlexGBravo Apr 13, 2024
72838fa
Update
AlexGBravo Apr 24, 2024
94d0c64
Servicios y mejoras
AlexGBravo May 16, 2024
37d3a03
Mejoras
AlexGBravo May 30, 2024
601aaa9
Mejoras de servicios
AlexGBravo May 30, 2024
c21c5dd
Solución de errores
AlexGBravo May 30, 2024
0565780
Ruta de obtener por Ids de indentidades
AlexGBravo May 30, 2024
f01ffc2
Https
AlexGBravo May 31, 2024
69cacd1
Update
AlexGBravo Jun 18, 2024
c17e208
Clean code
AlexGBravo Jun 27, 2024
2561eb8
Allow Apps y services
AlexGBravo Jun 27, 2024
19903e0
Allow Update
AlexGBravo Jul 9, 2024
4b27ab7
Correcciones
AlexGBravo Aug 29, 2024
7526154
Create dotnet-desktop.yml
AlexGBravo Aug 29, 2024
5bd3494
Mejoras
AlexGBravo Aug 31, 2024
946c776
Mejoras de claridad
AlexGBravo Aug 31, 2024
af8b133
Fix
AlexGBravo Aug 31, 2024
937c1d1
Solución de errores
AlexGBravo Aug 31, 2024
08e1475
Update
AlexGBravo Sep 7, 2024
5a846b1
Pruebas unitarias
AlexGBravo Sep 21, 2024
3305725
Unitarias
AlexGBravo Sep 21, 2024
049b3af
Mejoras de unitarias
AlexGBravo Sep 21, 2024
fc5996b
Nuevas validaciones de formato
AlexGBravo Sep 21, 2024
fcd12f1
FORMATO DE CÓDIGO
AlexGBravo Sep 21, 2024
8977d23
Formato
AlexGBravo Sep 21, 2024
53b9bc0
mejoras
AlexGBravo Sep 21, 2024
9bf7486
Mejoras
AlexGBravo Sep 22, 2024
304e0b4
Update dependencies by LIN Nuget Manager
AlexGBravo Oct 6, 2024
c7d07d6
update
AlexGBravo Oct 7, 2024
2f057eb
Update
AlexGBravo Oct 10, 2024
73842fd
Integración de logs
AlexGBravo Oct 12, 2024
3e92f1e
Merge pull request #2 from LINServices/feature/account_logs
AlexGBravo Oct 12, 2024
a4faf32
clean
AlexGBravo Oct 12, 2024
28bccad
Mejoras en el passkey hub
AlexGBravo Oct 12, 2024
1a65dbc
Mejoras de seguridad
AlexGBravo Oct 12, 2024
cb75749
Merge pull request #3 from LINServices/hotfix/security_update
AlexGBravo Oct 12, 2024
e1c7f3f
Expulsar integrantes
AlexGBravo Oct 12, 2024
36218e6
Merge pull request #4 from LINServices/feature/expulse_members
AlexGBravo Oct 12, 2024
4e70e92
update
AlexGBravo Oct 12, 2024
df26224
Mejoras
AlexGBravo Oct 13, 2024
695cc0f
mejoras
AlexGBravo Oct 13, 2024
3cada1d
Refactorización de autenticación y controladores
AlexGBravo Oct 13, 2024
bb15ead
Se agregaron mas test
AlexGBravo Oct 13, 2024
68d274e
Mejoras generales
AlexGBravo Oct 14, 2024
b971496
Swagger token map.
AlexGBravo Oct 14, 2024
55af906
Code format
AlexGBravo Oct 14, 2024
14fa8ac
Obtener politicas
AlexGBravo Oct 14, 2024
6d4fb9f
Nuevas rutas
AlexGBravo Oct 14, 2024
fa88971
Controladores
AlexGBravo Oct 14, 2024
3543c2c
Solucion de errores
AlexGBravo Oct 14, 2024
6d3db21
Mejoras de IAM
AlexGBravo Oct 14, 2024
8136597
Merge pull request #5 from LINServices/feature/policies
AlexGBravo Oct 14, 2024
b196ff6
Update
AlexGBravo Oct 16, 2024
7ee0135
hotfix
AlexGBravo Oct 18, 2024
189d5dd
Mejoras de seguridad y bases
AlexGBravo Oct 20, 2024
8b5c29b
Refactorización de Policies y adición de PolicyService
AlexGBravo Oct 24, 2024
e9ede20
mejoras
AlexGBravo Oct 25, 2024
db2e39d
mejoras de seguiridad
AlexGBravo Oct 25, 2024
6a25cd1
Merge pull request #7 from LINServices/feature/policy_requirements
AlexGBravo Oct 25, 2024
dda97a1
Corrección
AlexGBravo Oct 26, 2024
5d7228e
Mejoras de seguridad
AlexGBravo Oct 26, 2024
b669ead
Mejoras de seguridad
AlexGBravo Oct 26, 2024
63b319b
Refactorización y corrección de filtros y validaciones
AlexGBravo Oct 26, 2024
57de9bc
Mejoras
AlexGBravo Nov 12, 2024
a56988c
Net 9 PRE
AlexGBravo Nov 12, 2024
b021b4c
Mejoras
AlexGBravo Nov 12, 2024
b6cb22e
Update
AlexGBravo Nov 14, 2024
1298e43
Merge main
AlexGBravo Nov 14, 2024
b8df6a0
Update
AlexGBravo Nov 14, 2024
42f9007
Update
AlexGBravo Nov 14, 2024
c110787
mejoras
AlexGBravo Nov 25, 2024
83790bd
General
AlexGBravo Nov 28, 2024
fa0d132
Update
AlexGBravo Dec 8, 2024
9777866
Update
AlexGBravo Dec 12, 2024
3ad384d
Merge main
AlexGBravo Dec 12, 2024
3bb560f
Merge pull request #8 from LINServices/feature/net_9
AlexGBravo Dec 12, 2024
e93c825
Actualización de paquetes y limpieza de código
AlexGBravo Jan 22, 2025
9ba07e2
Update
AlexGBravo Feb 9, 2025
3ae0901
Data seed, mejoras en autenticacion
AlexGBravo Feb 16, 2025
b318855
Mejoras de optimización
AlexGBravo Feb 16, 2025
5b6b8fb
up
AlexGBravo Feb 16, 2025
916accd
Seed Update
AlexGBravo Feb 16, 2025
c20b74c
Comentarios
AlexGBravo Feb 16, 2025
5a96dd2
Update
AlexGBravo Feb 16, 2025
2daaeb4
Update
AlexGBravo Feb 16, 2025
c7b98e4
Update
AlexGBravo Feb 16, 2025
41d5db1
Mejoras
AlexGBravo Feb 16, 2025
e333cd6
Mejoras generales
AlexGBravo Feb 16, 2025
d355a86
mejoras
AlexGBravo Feb 16, 2025
b2cb555
Update
AlexGBravo Feb 16, 2025
83f3fdf
Fix
AlexGBravo Feb 17, 2025
fb78122
Actualización de estandar
AlexGBravo Feb 23, 2025
687a1e8
update
AlexGBravo Feb 23, 2025
419d80d
Integración logger
AlexGBravo Feb 23, 2025
8c38b8b
Update
AlexGBravo Feb 24, 2025
1d80c8e
Clean
AlexGBravo Mar 8, 2025
de35af0
Fix
AlexGBravo May 11, 2025
b12aa11
separacion de controladores, nuevos nombres, repositorios
AlexGBravo May 11, 2025
6ecc8fa
Motor de politicas
AlexGBravo May 17, 2025
0913e39
limpieza de codigo, y mejoras generales
AlexGBravo May 17, 2025
7bb69fc
Limpieza
AlexGBravo May 17, 2025
293b1c1
fix
AlexGBravo May 17, 2025
4239e83
Mejoras de V4 y nuevo contrador
AlexGBravo May 18, 2025
3e72c08
mejoras generales
AlexGBravo May 18, 2025
2eb7e99
Mejoras en servicios, mails y seguridad
AlexGBravo May 19, 2025
3e8651a
Mejoras generales.
AlexGBravo May 25, 2025
2ca8796
Integración con autenticación de terceros, identidades federadas y Go…
AlexGBravo May 25, 2025
f54ee03
update
AlexGBravo May 25, 2025
1361bea
Cuentas temporales.
AlexGBravo May 25, 2025
cbf962a
mejoras generales.
AlexGBravo May 25, 2025
c41d7c6
mejoras generales.
AlexGBravo May 25, 2025
621fb0c
Actualiza versiones de paquetes y limpia código innecesario
AlexGBravo Jul 31, 2025
bcfa736
finalizar integración
AlexGBravo Aug 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -402,4 +402,6 @@ FodyWeavers.xsd
*.msp

# JetBrains Rider
*.sln.iml
*.sln.iml
/LIN.Cloud.Identity/appsettings.json
/LIN.Cloud.Identity/appsettings.firebase.json
Empty file added ARCHITECTURE.md
Empty file.
15 changes: 15 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
LIN ACADEMIC LICENSE
Versión 1 - 10 abril 2024

Este software y su código fuente están disponibles para su visualización con fines exclusivamente académicos. Se concede permiso a cualquier persona que acceda a este software para ver su código fuente con el propósito de estudio, investigación o enseñanza, siempre y cuando se respeten los términos y condiciones de esta licencia.

Limitaciones:
1. No se permite la distribución de este software ni de su código fuente, ya sea en su forma original o modificada.
2. No se permite el uso de este software ni de su código fuente con fines comerciales.
3. Cualquier uso fuera del ámbito académico está expresamente prohibido.

Responsabilidad:
Este software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otras, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. El titular de los derechos de autor no será responsable de ningún daño directo, indirecto, incidental, especial, ejemplar o consecuencial (incluidos, entre otros, la adquisición de bienes o servicios sustitutos, la pérdida de uso, datos o beneficios o interrupción del negocio) sin importar la causa y bajo cualquier responsabilidad teoría de responsabilidad, ya sea en contrato, responsabilidad estricta o agravio (incluida la negligencia o de otra manera) que surja de cualquier manera del uso de este software, incluso si se ha advertido de la posibilidad de tales daños.

Aceptación:
Al acceder o utilizar este software, usted acepta cumplir con los términos y condiciones de esta licencia. Si no acepta estos términos y condiciones, no está autorizado a utilizar este software ni su código fuente.
316 changes: 316 additions & 0 deletions LIN.Cloud.Identity.Persistence/Contexts/DataContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,316 @@
namespace LIN.Cloud.Identity.Persistence.Contexts;

public class DataContext(DbContextOptions<DataContext> options) : DbContext(options)
{

/// <summary>
/// Tabla de identidades.
/// </summary>
public DbSet<IdentityModel> Identities { get; set; }

/// <summary>
/// Tabla de cuentas.
/// </summary>
public DbSet<AccountModel> Accounts { get; set; }

/// <summary>
/// Organizaciones.
/// </summary>
public DbSet<OrganizationModel> Organizations { get; set; }

/// <summary>
/// Grupos.
/// </summary>
public DbSet<GroupModel> Groups { get; set; }

/// <summary>
/// Integrantes de un grupo.
/// </summary>
public DbSet<GroupMember> GroupMembers { get; set; }

/// <summary>
/// RolesIam de grupos.
/// </summary>
public DbSet<IdentityRolesModel> IdentityRoles { get; set; }

/// <summary>
/// Aplicaciones.
/// </summary>
public DbSet<ApplicationModel> Applications { get; set; }

/// <summary>
/// Logs de accounts.
/// </summary>
public DbSet<AccountLog> AccountLogs { get; set; }

/// <summary>
/// Políticas.
/// </summary>
public DbSet<PolicyModel> Policies { get; set; }

/// <summary>
/// Políticas por tipo de entidad.
/// </summary>
public DbSet<IdentityTypePolicy> IdentityTypesPolicies { get; set; }

/// <summary>
/// Políticas por acceso IP.
/// </summary>
public DbSet<IpAccessPolicy> IpAccessPolicies { get; set; }

/// <summary>
/// Políticas por acceso de tiempo.
/// </summary>
public DbSet<TimeAccessPolicy> TimeAccessPolicies { get; set; }

/// <summary>
/// Códigos OTPS.
/// </summary>
public DbSet<OtpDatabaseModel> OTPs { get; set; }

/// <summary>
/// Correos asociados a las cuentas.
/// </summary>
public DbSet<MailModel> Mails { get; set; }

/// <summary>
/// Mail Otp.
/// </summary>
public DbSet<MailOtpDatabaseModel> MailOtp { get; set; }

/// <summary>
/// Mail Otp.
/// </summary>
public DbSet<IdentityPolicyModel> IdentityPolicies { get; set; }

/// <summary>
/// Dominios.
/// </summary>
public DbSet<DomainModel> Domains { get; set; }

/// <summary>
/// Cuentas temporales.
/// </summary>
public DbSet<TemporalAccountModel> TemporalAccounts { get; set; }

/// <summary>
/// Crear el modelo en BD.
/// </summary>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Identity Model.
modelBuilder.Entity<IdentityModel>(entity =>
{
entity.ToTable("identities");
entity.HasIndex(t => t.Unique).IsUnique();

entity.HasOne(o => o.Owner)
.WithMany()
.HasForeignKey(o => o.OwnerId)
.OnDelete(DeleteBehavior.NoAction);
});

// Account Model.
modelBuilder.Entity<AccountModel>(entity =>
{
entity.ToTable("accounts");
entity.HasIndex(t => t.IdentityId).IsUnique();
});

// Organization Model.
modelBuilder.Entity<OrganizationModel>(entity =>
{
entity.ToTable("organizations");
entity.HasOne(o => o.Directory)
.WithOne()
.HasForeignKey<OrganizationModel>(o => o.DirectoryId)
.OnDelete(DeleteBehavior.NoAction);
});

// Group Model.
modelBuilder.Entity<GroupModel>(entity =>
{
entity.HasOne(t => t.Identity)
.WithMany()
.HasForeignKey(t => t.IdentityId)
.OnDelete(DeleteBehavior.NoAction);
});

// Group Member Model
modelBuilder.Entity<GroupMember>(entity =>
{
entity.ToTable("group_members");
entity.HasKey(t => new { t.IdentityId, t.GroupId });

entity.HasOne(t => t.Identity)
.WithMany()
.HasForeignKey(t => t.IdentityId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasOne(t => t.Group)
.WithMany(t => t.Members)
.HasForeignKey(t => t.GroupId);
});

// Group Member Model
modelBuilder.Entity<IdentityPolicyModel>(entity =>
{
entity.ToTable("identity_policy");
entity.HasKey(t => new { t.IdentityId, t.PolicyId });

entity.HasOne(t => t.Identity)
.WithMany()
.HasForeignKey(t => t.IdentityId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasOne(t => t.Policy)
.WithMany()
.HasForeignKey(t => t.PolicyId);
});

// Identity Roles Model
modelBuilder.Entity<IdentityRolesModel>(entity =>
{
entity.ToTable("identity_roles");
entity.HasKey(t => new { t.Rol, t.IdentityId, t.OrganizationId });

entity.HasOne(t => t.Identity)
.WithMany(t => t.Roles)
.HasForeignKey(t => t.IdentityId);

entity.HasOne(t => t.Organization)
.WithMany()
.HasForeignKey(t => t.OrganizationId);
});

// Application Model
modelBuilder.Entity<ApplicationModel>(entity =>
{
entity.ToTable("applications");
entity.HasIndex(t => t.IdentityId).IsUnique();
entity.HasIndex(t => t.Key).IsUnique();

entity.HasOne(t => t.Identity)
.WithMany()
.HasForeignKey(t => t.IdentityId);

entity.HasOne(t => t.Owner)
.WithMany()
.HasForeignKey(t => t.OwnerId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasMany(t => t.Policies)
.WithOne();
});

// Account Logs Model
modelBuilder.Entity<AccountLog>(entity =>
{
entity.ToTable("account_logs");
entity.HasOne(t => t.Application)
.WithMany()
.HasForeignKey(t => t.ApplicationId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasOne(t => t.Account)
.WithMany()
.HasForeignKey(t => t.AccountId)
.OnDelete(DeleteBehavior.NoAction);
});

// Policy Model
modelBuilder.Entity<PolicyModel>(entity =>
{
entity.ToTable("policies");
entity.HasOne(t => t.Owner)
.WithMany()
.HasForeignKey(t => t.OwnerId)
.OnDelete(DeleteBehavior.NoAction);

entity.Property(e => e.Id).IsRequired();
});

// Policy Model
modelBuilder.Entity<TemporalAccountModel>(entity =>
{
entity.ToTable("temporal_accounts");
entity.HasIndex(e => e.VerificationCode).IsUnique();
});

// Códigos OTPS.
modelBuilder.Entity<OtpDatabaseModel>(entity =>
{
entity.ToTable("otp_codes");
entity.HasOne(t => t.Account)
.WithMany()
.HasForeignKey(t => t.AccountId);
});

// Correos.
modelBuilder.Entity<MailModel>(entity =>
{
entity.ToTable("mails");
entity.HasOne(t => t.Account)
.WithMany()
.HasForeignKey(t => t.AccountId);

entity.HasIndex(t => t.Mail).IsUnique();
});

modelBuilder.Entity<IdentityTypePolicy>(entity =>
{
entity.ToTable("policy_types_identity");
entity.HasOne(t => t.Policy)
.WithMany()
.HasForeignKey(t => t.PolicyId);
});

modelBuilder.Entity<IpAccessPolicy>(entity =>
{
entity.ToTable("ip_access_policy");
entity.HasOne(t => t.Policy)
.WithMany()
.HasForeignKey(t => t.PolicyId);
});

modelBuilder.Entity<DomainModel>(entity =>
{
entity.ToTable("domains");
entity.HasOne(t => t.Organization)
.WithMany()
.HasForeignKey(t => t.OrganizationId);

entity.HasIndex(t => t.Domain).IsUnique();
});

modelBuilder.Entity<TimeAccessPolicy>(entity =>
{
entity.ToTable("time_access_policy");
entity.HasOne(t => t.Policy)
.WithMany()
.HasForeignKey(t => t.PolicyId);
});

// Mail OTP.
modelBuilder.Entity<MailOtpDatabaseModel>(entity =>
{
entity.ToTable("mail_otp");

entity.HasOne(t => t.MailModel)
.WithMany()
.HasForeignKey(t => t.MailId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasOne(t => t.OtpDatabaseModel)
.WithMany()
.HasForeignKey(t => t.OtpId)
.OnDelete(DeleteBehavior.NoAction);

entity.HasKey(t => new { t.MailId, t.OtpId });

});

// Base.
base.OnModelCreating(modelBuilder);
}
}
Loading