using System.Text.RegularExpressions; using Entidades; using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioPermisos: RepositorioBase { public IQueryable? ListarPermisos(string email) { var con = Context; Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(c => c.Email == email); if (cli == null) return null; var list = con.Clientes .Where(c => c.Dni == cli.Dni) .SelectMany(c => c.Idgrupos) .SelectMany(g => g.Idpermisos) .Distinct(); return list; } public bool CheckPermisos(string token, string path){ var con = Context; //checkeo que el token corresponda a un usuario Cliente? cli = con.Clientes.FirstOrDefault(x => x.Token == token); if (cli == null || cli.Dni == 0) return false; // obtengo una lista de los permisos var permisos = con.Clientes .Where(x => x.Dni == cli.Dni) .SelectMany(x => x.Idgrupos) .SelectMany(x => x.Idpermisos) .Distinct(); //me inspiré y hice un regex pero si eliminaba los primeros 8(?) caracteres del string era lo mismo Match match = Regex.Match(path, @"^/accion/(\d+)$"); int.TryParse(match.Groups[1].Value, out int idpermiso); bool tienePermiso = false; Parallel.ForEach(permisos, (x, i) =>{ if (x.Id == idpermiso) { tienePermiso = true; } }); return tienePermiso; } #if DEBUG public bool CrearPermiso(string descripcion) { var con = Context; int mx = con.Permisos.Max(x => x.Id); Permiso per = new Permiso{ Id = mx+1, Descripcion = descripcion }; con.Permisos.Add(per); return Guardar(con); } #endif }