diff --git a/Entidades/Alquilafacilcontext.cs b/Entidades/Alquilafacilcontext.cs index f986a48..0d9ce17 100644 --- a/Entidades/Alquilafacilcontext.cs +++ b/Entidades/Alquilafacilcontext.cs @@ -419,6 +419,42 @@ public partial class AlquilaFacilContext : DbContext entity.Property(e => e.Nombre) .HasMaxLength(12) .HasColumnName("nombre"); + + entity.HasMany(d => d.IdGrupoHijos).WithMany(p => p.IdGrupoPadres) + .UsingEntity>( + "GrupoSubgrupo", + r => r.HasOne().WithMany() + .HasForeignKey("IdGrupoHijo") + .HasConstraintName("Grupo_Subgrupo_ibfk_2"), + l => l.HasOne().WithMany() + .HasForeignKey("IdGrupoPadre") + .HasConstraintName("Grupo_Subgrupo_ibfk_1"), + j => + { + j.HasKey("IdGrupoPadre", "IdGrupoHijo").HasName("PRIMARY"); + j.ToTable("Grupo_Subgrupo"); + j.HasIndex(new[] { "IdGrupoHijo" }, "IdGrupoHijo"); + j.IndexerProperty("IdGrupoPadre").HasColumnType("int(11)"); + j.IndexerProperty("IdGrupoHijo").HasColumnType("int(11)"); + }); + + entity.HasMany(d => d.IdGrupoPadres).WithMany(p => p.IdGrupoHijos) + .UsingEntity>( + "GrupoSubgrupo", + r => r.HasOne().WithMany() + .HasForeignKey("IdGrupoPadre") + .HasConstraintName("Grupo_Subgrupo_ibfk_1"), + l => l.HasOne().WithMany() + .HasForeignKey("IdGrupoHijo") + .HasConstraintName("Grupo_Subgrupo_ibfk_2"), + j => + { + j.HasKey("IdGrupoPadre", "IdGrupoHijo").HasName("PRIMARY"); + j.ToTable("Grupo_Subgrupo"); + j.HasIndex(new[] { "IdGrupoHijo" }, "IdGrupoHijo"); + j.IndexerProperty("IdGrupoPadre").HasColumnType("int(11)"); + j.IndexerProperty("IdGrupoHijo").HasColumnType("int(11)"); + }); }); modelBuilder.Entity(entity => diff --git a/Entidades/Grupo.cs b/Entidades/Grupo.cs index 420bc05..4aac993 100644 --- a/Entidades/Grupo.cs +++ b/Entidades/Grupo.cs @@ -4,14 +4,34 @@ using System.Text.Json.Serialization; namespace Entidades; -public partial class Grupo +public partial class Grupo:IComponenteSeguridad { public int Id { get; set; } public string Nombre { get; set; } = null!; + [JsonIgnore] + public virtual ICollection IdGrupoHijos { get; set; } = new List(); + + [JsonIgnore] + public virtual ICollection IdGrupoPadres { get; set; } = new List(); + [JsonIgnore] public virtual ICollection Idclientes { get; set; } = new List(); public virtual ICollection Idpermisos { get; set; } = new List(); + + public void ObtenerPermisos(HashSet permisos, HashSet visitados) + { + if (visitados.Contains(Id)) return; + visitados.Add(Id); + foreach (var permiso in Idpermisos) { + permisos.Add(permiso); + } + + foreach (var subgrupo in IdGrupoPadres) { + subgrupo.ObtenerPermisos(permisos, visitados); + } + + } } diff --git a/Entidades/Permiso.cs b/Entidades/Permiso.cs index e8da1b5..ec85059 100644 --- a/Entidades/Permiso.cs +++ b/Entidades/Permiso.cs @@ -4,12 +4,17 @@ using System.Text.Json.Serialization; namespace Entidades; -public partial class Permiso +public partial class Permiso:IComponenteSeguridad { public int Id { get; set; } public string Descripcion { get; set; } = null!; - + [JsonIgnore] public virtual ICollection Idgrupos { get; set; } = new List(); + + public void ObtenerPermisos(HashSet permisos, HashSet visitados) + { + permisos.Add(this); + } } diff --git a/Entidades/SeguridadComposite/ComponenteSeguridad.cs b/Entidades/SeguridadComposite/ComponenteSeguridad.cs new file mode 100644 index 0000000..140a116 --- /dev/null +++ b/Entidades/SeguridadComposite/ComponenteSeguridad.cs @@ -0,0 +1,5 @@ +namespace Entidades; + +public interface IComponenteSeguridad { + public void ObtenerPermisos(HashSet permisos, HashSet visitados); +} \ No newline at end of file