示例#1
0
            public INavData recursion(TAcceso it)
            {
                var nodo = new INavData();

                nodo.name = it.Nombre;
                nodo.url  = it.Componente;
                nodo.icon = it.Icono;
                if (it.BadgeText != null || it.BadgeVariant != null)
                {
                    nodo.badge = new INavBadge(it.BadgeVariant, it.BadgeText);
                }

                if (it.Hijos.Count > 0)
                {
                    //foreach (var item in it.Hijos)
                    var hijos = this.AccesosUser.Where(a => a.CodPadre == it.CodAcceso).ToList();
                    foreach (var item in hijos)
                    {
                        nodo.children.Add(recursion(item));
                    }
                }
                else
                {
                    nodo.children = null;
                }
                return(nodo);
            }
示例#2
0
            public async Task <UserVM> Handle(GetLoginQuery request, CancellationToken cancellationToken)
            {
                var user = await _context.TUsuario.Include(i => i.UsuarioRoles).FirstOrDefaultAsync(f => f.Usuario == request.Usuario.usuario).ConfigureAwait(true);

                if (user == null)
                {
                    throw new GeneralFailureException("Usuario no Existe");
                }
                //if (user.UsuarioRoles.Any(r => r.CodRol==6)) throw new GeneralFailureException("Sistema en mantenimiento espere su acceso");
                bool tipoB = !user.TipoLogueo && request.Usuario.password == user.Password;
                bool tipoW = user.TipoLogueo && LoginActiveDirectory(request.Usuario.usuario, request.Usuario.password, "anyaccess");

                if (user.Estado && (tipoB || tipoW))
                {
                    var claims = new List <Claim>()
                    {
                        //new Claim("isAdministrator", "true"),
                        new Claim(ClaimTypes.PrimarySid, "" + user.CodUsuario),
                        new Claim(ClaimTypes.Name, user.Usuario),
                        new Claim(ClaimTypes.Role, user.UsuarioRoles.FirstOrDefault().CodRol + ""),
                        new Claim(ClaimTypes.NameIdentifier, user.CodPersona)
                    };

                    var tokenHandler    = new JwtSecurityTokenHandler();
                    var tokenDescriptor = new SecurityTokenDescriptor
                    {
                        Issuer             = Configuration["JWT:Issuer"],
                        Audience           = Configuration["JWT:Audience"],
                        Subject            = new ClaimsIdentity(claims),
                        Expires            = DateTime.UtcNow.AddMinutes(int.Parse(Configuration["JWT:TokenDuration"])),
                        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["JWT:Key"])), SecurityAlgorithms.HmacSha256Signature)
                    };
                    var tokenRide = tokenHandler.CreateToken(tokenDescriptor);

                    var token = tokenHandler.WriteToken(tokenRide);
                    //this._tokenService.GenerateToken(Configuration["JWT:Issuer"], Configuration["JWT:Key"], int.Parse(Configuration["JWT:TokenDuration"]), claims);

                    var persona = await _context.TPersona.FirstOrDefaultAsync(w => w.CodPersona == user.CodPersona).ConfigureAwait(true);

                    //if (request.Usuario.tipoPersona == null) request.Usuario.tipoPersona = 1;
                    if (request.Usuario.tipoPersona > 0 && request.Usuario.tipoPersona != Int32.Parse(persona.CodTipoPersona))
                    {
                        throw new GeneralFailureException("Usuario no Existe");
                    }
                    int[] roles    = user.UsuarioRoles.Where(x => x.Estado).Select(x => x.CodRol).ToArray();
                    var   rolesDes = _context.TRol.Where(r => roles.Contains(r.CodRol)).Select(a => a.Descripcion).ToList();
                    //var Accesos = await _context.TAcceso.Join(_context.TRolAcceso,  )
                    var Accesos = _context.TAcceso.Include(i => i.Hijos).Include(i => i.RolAccesos).Where(a => a.Estado).ToList();//.Where(a => a.RolAccesos.Select(x => x.CodRol).Intersect(roles).Any()).ToList();
                    this.AccesosUser = Accesos.Where(a => a.RolAccesos.Where(x => x.Estado).Select(x => x.CodRol).Intersect(roles).Any()).ToList();

                    var BarMenu = new List <INavData>();
                    foreach (var item in this.AccesosUser)
                    {
                        if (item.Padre == null)
                        {
                            INavData node = recursion(item);
                            BarMenu.Add(node);
                        }
                    }

                    var model = new UserVM();



                    model.token      = token;
                    model.usuario    = user.Usuario;
                    model.codUsuario = user.CodUsuario;
                    model.codPersona = user.CodPersona;
                    model.rol        = string.Join(";", rolesDes);
                    model.codRol     = string.Join(";", roles);
                    model.barMenu    = BarMenu;
                    if (persona != null)
                    {
                        model.nombres        = persona.Nombres;
                        model.apellidos      = persona.ApellidoPaterno + " " + persona.ApellidoMaterno;
                        model.nroDocumento   = persona.NroDocumento;
                        model.cargo          = persona.Ocupacion;
                        model.sexo           = persona.Sexo.ToString();
                        model.codTipoPersona = Int32.Parse(persona.CodTipoPersona);
                        model.empresa        = persona.Empresa;
                        model.email          = persona.Email;
                    }
                    else
                    {
                        model.codTipoPersona = 2;
                    }
                    return(model);
                }
                else
                {
                    if (!user.Estado)
                    {
                        throw new GeneralFailureException("Usuario Inactivo");
                    }
                    else
                    {
                        throw new GeneralFailureException("Contraseña incorrecta");
                    }
                }
            }