60 lines
1.9 KiB
C#
60 lines
1.9 KiB
C#
using System.Text.RegularExpressions;
|
|
using Entidades;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Modelo;
|
|
public class RepositorioPermisos: RepositorioBase<RepositorioPermisos> {
|
|
public IQueryable<Permiso>? 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,
|
|
Descripcion = descripcion
|
|
};
|
|
con.Permisos.Add(per);
|
|
return Guardar(con);
|
|
}
|
|
#endif
|
|
} |