This commit is contained in:
Cristian Guerrero 2024-11-16 09:35:32 -05:00
parent 6fd5147409
commit 2301af19cb
3 changed files with 155 additions and 51 deletions

View File

@ -127,9 +127,9 @@ namespace ApiGateway
foreach (Claim cl in claims) // Claim (key:value) desde el token foreach (Claim cl in claims) // Claim (key:value) desde el token
{ {
if (cl.Type == claim.Key && String.Equals(claim.Key, "permisos")) if (cl.Type == claim.Key && String.Equals(claim.Key, "prm"))
{ {
string separador = "::"; string separador = "|";
int index = cl.Value.LastIndexOf(separador); int index = cl.Value.LastIndexOf(separador);
string newPermiso = cl.Value; string newPermiso = cl.Value;

View File

@ -311,6 +311,7 @@ namespace MSAdminUsuarios.Controllers
} }
} }
// **** Original
[HttpPost("pruebaUsuario")] [HttpPost("pruebaUsuario")]
public string Token(USUARIO user) public string Token(USUARIO user)
{ {
@ -322,40 +323,32 @@ namespace MSAdminUsuarios.Controllers
List<int?> perfiles = perfilesPorUsuario.Select(p => p.NU_FK_PFL).ToList(); List<int?> perfiles = perfilesPorUsuario.Select(p => p.NU_FK_PFL).ToList();
// Verificar si alguno de los perfiles es 2 List<PERMISO> permisos = (from perfXUs in perfilesPorUsuario
bool perfilEsDos = perfiles.Contains(2); join perm in _context.PERMISOSMs on perfXUs.NU_FK_PFL equals perm.NU_FK_PFL
where perm.BL_ESTADO_PMS == 1
// Solo obtenemos permisos si no existe el perfil 2 select perm).ToList();
List<PERMISO> permisos = perfilEsDos ? new List<PERMISO>() :
(from perfXUs in perfilesPorUsuario
join perm in _context.PERMISOSMs on perfXUs.NU_FK_PFL equals perm.NU_FK_PFL
where perm.BL_ESTADO_PMS == 1
select perm).ToList();
Dictionary<string, string> perfilesPorPermiso = new(); Dictionary<string, string> perfilesPorPermiso = new();
// Todos foreach (PERMISO p in permisos)
if (!perfilEsDos) // Solo procesar permisos si el perfil no es 2
{ {
foreach (PERMISO p in permisos) string key = p.NU_FK_MS.ToString();
{ string val = p.NU_FK_PFL.ToString();
string key = p.NU_FK_MS.ToString();
string val = p.NU_FK_PFL.ToString();
if (perfilesPorPermiso.ContainsKey(key)) if (perfilesPorPermiso.ContainsKey(key))
{ {
string antVal = perfilesPorPermiso[key]; string antVal = perfilesPorPermiso[key];
perfilesPorPermiso[key] = antVal + "," + val; perfilesPorPermiso.Remove(key);
} perfilesPorPermiso.Add(key, antVal + "," + val);
else }
{ else
perfilesPorPermiso.Add(key, val); {
} perfilesPorPermiso.Add(key, val);
} }
} }
perfiles.Add(-1); perfiles.Add(-1);
// Security key debe ser un environment variable seguro //Security key debe ser un environment variable seguro
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Encripter.HashKey)); var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Encripter.HashKey));
var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256); var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
string nombres = ""; string nombres = "";
@ -375,30 +368,35 @@ namespace MSAdminUsuarios.Controllers
int tipo_doc = user.NU_TIPODOC_USUMS == null ? -1 : (int)user.NU_TIPODOC_USUMS; int tipo_doc = user.NU_TIPODOC_USUMS == null ? -1 : (int)user.NU_TIPODOC_USUMS;
ClaimsIdentity claims = new ClaimsIdentity(new List<Claim> ClaimsIdentity claims = new ClaimsIdentity(new List<Claim>
{ {
new Claim("user", user.TX_PKDOC_USUMS), new Claim("user", user.TX_PKDOC_USUMS),
new Claim("nombres", nombres), new Claim("nombres", nombres),
new Claim("apellidos", apellidos), new Claim("apellidos", apellidos),
new Claim("tipo_doc", tipo_doc.ToString()), new Claim("tipo_doc", tipo_doc.ToString()),
new Claim("pk", user.NU_PK_USUMS.ToString()), new Claim("pk", user.NU_PK_USUMS.ToString()),
new Claim("sedes", user.TX_SEDES_USUMS ?? ""), new Claim("sedes", user.TX_SEDES_USUMS == null ? "" : user.TX_SEDES_USUMS),
new Claim("TX_NOMBRE_PVD", user.TX_NOMBRE_PVD ?? "{}"), new Claim("TX_NOMBRE_PVD", user.TX_NOMBRE_PVD ?? "{}"),
new Claim("uid", user.TX_UUID_USUMS.ToString()) new Claim("uid", user.TX_UUID_USUMS.ToString())
}); });
foreach (int p in perfiles) foreach (int p in perfiles)
{ {
claims.AddClaim(new Claim("perfiles", p.ToString(), ClaimValueTypes.String)); claims.AddClaim(new Claim("perfiles", p.ToString(), ClaimValueTypes.String));
} }
if (!perfilEsDos) // Añadir permisos solo si perfil no es 2
//foreach (PERMISO p in permisos)
//{
// claims.AddClaim(new Claim("permisos", Encripter.Encrypt(p.NU_FK_MS.ToString())));
//}
foreach (KeyValuePair<string, string> p in perfilesPorPermiso)
{ {
foreach (KeyValuePair<string, string> p in perfilesPorPermiso) string key = p.Key;
{ string val = p.Value;
string key = p.Key;
string val = p.Value; claims.AddClaim(new Claim("permisos", _encript.EncryptHashTkn(key) + "::" + val));
claims.AddClaim(new Claim("permisos", _encript.EncryptHashTkn(key) + "::" + val));
}
} }
var securityTokenDescriptor = new SecurityTokenDescriptor var securityTokenDescriptor = new SecurityTokenDescriptor
@ -414,6 +412,111 @@ namespace MSAdminUsuarios.Controllers
return Encripter.Cypher(token); return Encripter.Cypher(token);
} }
// **** Original
//[HttpPost("pruebaUsuario")]
//public string Token(USUARIO user)
//{
// List<PERFILPORUSUARIO> perfilesPorUsuario = (from perf in _context.PERFILESPORUSUARIOs
// where perf.TX_FKDOC_USUMS == user.TX_PKDOC_USUMS && perf.NU_FK_PFL != null && perf.BL_ESTADO_PFLXUSU == 1
// select perf).ToList();
// _logger.LogInformation(perfilesPorUsuario.ToString());
// List<int?> perfiles = perfilesPorUsuario.Select(p => p.NU_FK_PFL).ToList();
// // Verificar si alguno de los perfiles es 2
// bool perfilEsDos = perfiles.Contains(2);
// // Solo obtenemos permisos si no existe el perfil 2
// List<PERMISO> permisos = perfilEsDos ? new List<PERMISO>() :
// (from perfXUs in perfilesPorUsuario
// join perm in _context.PERMISOSMs on perfXUs.NU_FK_PFL equals perm.NU_FK_PFL
// where perm.BL_ESTADO_PMS == 1
// select perm).ToList();
// Dictionary<string, string> perfilesPorPermiso = new();
// // Todos
// if (!perfilEsDos) // Solo procesar permisos si el perfil no es 2
// {
// foreach (PERMISO p in permisos)
// {
// string key = p.NU_FK_MS.ToString();
// string val = p.NU_FK_PFL.ToString();
// if (perfilesPorPermiso.ContainsKey(key))
// {
// string antVal = perfilesPorPermiso[key];
// perfilesPorPermiso[key] = antVal + "," + val;
// }
// else
// {
// perfilesPorPermiso.Add(key, val);
// }
// }
// }
// perfiles.Add(-1);
// // Security key debe ser un environment variable seguro
// var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Encripter.HashKey));
// var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
// string nombres = "";
// string apellidos = "";
// if (user.TX_PRIMERNOM_USUMS != null) nombres += user.TX_PRIMERNOM_USUMS;
// if (user.TX_SEGUNDONOM_USUMS != null) nombres += " " + user.TX_SEGUNDONOM_USUMS;
// if (user.TX_PRIMERAPELL_USUMS != null) apellidos += user.TX_PRIMERAPELL_USUMS;
// if (user.TX_SEGUNDOAPELL_USUMS != null) apellidos += " " + user.TX_SEGUNDOAPELL_USUMS;
// nombres = nombres.Trim();
// apellidos = apellidos.Trim();
// if (nombres == "") nombres = "N";
// if (apellidos == "") apellidos = "A";
// int tipo_doc = user.NU_TIPODOC_USUMS == null ? -1 : (int)user.NU_TIPODOC_USUMS;
// ClaimsIdentity claims = new ClaimsIdentity(new List<Claim>
//{
// new Claim("user", user.TX_PKDOC_USUMS),
// new Claim("nombres", nombres),
// new Claim("apellidos", apellidos),
// new Claim("tipo_doc", tipo_doc.ToString()),
// new Claim("pk", user.NU_PK_USUMS.ToString()),
// new Claim("sedes", user.TX_SEDES_USUMS ?? ""),
// new Claim("TX_NOMBRE_PVD", user.TX_NOMBRE_PVD ?? "{}"),
// new Claim("uid", user.TX_UUID_USUMS.ToString())
//});
// foreach (int p in perfiles)
// {
// claims.AddClaim(new Claim("perfiles", p.ToString(), ClaimValueTypes.String));
// }
// if (!perfilEsDos) // Añadir permisos solo si perfil no es 2
// {
// foreach (KeyValuePair<string, string> p in perfilesPorPermiso)
// {
// string key = p.Key;
// string val = p.Value;
// claims.AddClaim(new Claim("permisos", _encript.EncryptHashTkn(key) + "::" + val));
// }
// }
// var securityTokenDescriptor = new SecurityTokenDescriptor
// {
// Subject = claims,
// Expires = DateTime.Now.AddDays(20),
// SigningCredentials = signingCredentials
// };
// var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
// var securityToken = jwtSecurityTokenHandler.CreateToken(securityTokenDescriptor);
// var token = jwtSecurityTokenHandler.WriteToken(securityToken);
// return Encripter.Cypher(token);
//}
//[HttpPost("pruebaUsuario")] //[HttpPost("pruebaUsuario")]
//public string Token(USUARIO user) //public string Token(USUARIO user)
@ -472,13 +575,13 @@ namespace MSAdminUsuarios.Controllers
// ClaimsIdentity claims = new ClaimsIdentity(new List<Claim> // ClaimsIdentity claims = new ClaimsIdentity(new List<Claim>
// { // {
// new Claim("user", user.TX_PKDOC_USUMS), // new Claim("us", user.TX_PKDOC_USUMS),
// new Claim("nombres", nombres), // new Claim("nm", nombres),
// new Claim("apellidos", apellidos), // new Claim("ap", apellidos),
// new Claim("tipo_doc", tipo_doc.ToString()), // new Claim("td", tipo_doc.ToString()),
// new Claim("pk", user.NU_PK_USUMS.ToString()), // new Claim("pk", user.NU_PK_USUMS.ToString()),
// new Claim("sedes", user.TX_SEDES_USUMS == null ? "" : user.TX_SEDES_USUMS), // new Claim("s", user.TX_SEDES_USUMS == null ? "" : user.TX_SEDES_USUMS),
// new Claim("TX_NOMBRE_PVD", user.TX_NOMBRE_PVD ?? "{}"), // new Claim("PVD", user.TX_NOMBRE_PVD ?? "{}"),
// new Claim("uid", user.TX_UUID_USUMS.ToString()) // new Claim("uid", user.TX_UUID_USUMS.ToString())
// }); // });
@ -499,7 +602,7 @@ namespace MSAdminUsuarios.Controllers
// string key = p.Key; // string key = p.Key;
// string val = p.Value; // string val = p.Value;
// claims.AddClaim(new Claim("permisos", _encript.EncryptHashTkn(key) + "::" + val)); // claims.AddClaim(new Claim("prm", _encript.EncryptHashTkn(key) + "|" + val));
// } // }
// var securityTokenDescriptor = new SecurityTokenDescriptor // var securityTokenDescriptor = new SecurityTokenDescriptor

View File

@ -22,6 +22,7 @@
}, },
"IIS Express": { "IIS Express": {
"commandName": "IISExpress", "commandName": "IISExpress",
"sslPort": 7292,
"launchBrowser": true, "launchBrowser": true,
"launchUrl": "swagger", "launchUrl": "swagger",
"environmentVariables": { "environmentVariables": {