public async Task <IActionResult> PermissionsDelete(PermisoUserDTO permisoUserDTO)
        {
            IActionResult result;
            User          userRevoker;
            User          userToRemove;
            Permiso       permiso;
            UserPermiso   userPermiso;
            List <string> permisosOk;
            string        permisoLow;

            if (ContextoHttp.IsAuthenticated)
            {
                if (!Equals(permisoUserDTO, default))
                {
                    userRevoker = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp));

                    if (userRevoker.IsAdmin)
                    {
                        userToRemove = Context.GetUserPermiso(permisoUserDTO.EmailUser);
                        if (!Equals(userToRemove, default))
                        {
                            if (userRevoker.Id.Equals(userToRemove.Id))
                            {
                                result = Unauthorized();//no se puede quitar permisos a si mismo
                            }
                            else
                            {
                                permisosOk = new List <string>();
                                for (int i = 0; i < permisoUserDTO.Permisos.Length; i++)
                                {
                                    permisoLow = permisoUserDTO.Permisos[i].ToLower();
                                    permiso    = await Context.Permisos.Where(p => p.Nombre.Equals(permisoLow)).FirstOrDefaultAsync();

                                    if (!Equals(permiso, default))
                                    {
                                        userPermiso = await Context.PermisosUsuarios.Where(p => p.PermisoId.Equals(permiso.Id) && p.UserId.Equals(userToRemove.Id)).FirstOrDefaultAsync();

                                        if (!Equals(userPermiso, default))
                                        {
                                            try
                                            {
                                                if (userPermiso.IsActive)
                                                {
                                                    userPermiso.RevokedBy   = userRevoker;
                                                    userPermiso.RevokedDate = DateTime.UtcNow;
                                                    Context.PermisosUsuarios.Update(userPermiso);
                                                    await Context.SaveChangesAsync();
                                                }
                                                permisosOk.Add(permisoUserDTO.Permisos[i]);
                                            }
                                            catch { }
                                        }
                                    }
                                }
                                result = Ok(permisosOk.Select(p => new PermisoDTO(p)));
                            }
                        }
                        else
                        {
                            result = NotFound();
                        }
                    }
                    else
                    {
                        result = Unauthorized();
                    }
                }
                else
                {
                    result = BadRequest();
                }
            }
            else
            {
                result = this.NotLoggedIn();
            }
            return(result);
        }
        public async Task <IActionResult> PermissionsPut(PermisoUserDTO permisoUserDTO)
        {
            IActionResult result;
            User          userGranter;
            User          userToAdd;
            Permiso       permiso;
            UserPermiso   userPermiso;
            List <string> permisosOk;
            string        permisoLow;

            if (ContextoHttp.IsAuthenticated)
            {
                if (!Equals(permisoUserDTO, default))
                {
                    userGranter = Context.GetUserPermiso(Models.User.GetEmailFromHttpContext(ContextoHttp));

                    if (userGranter.IsAdmin)
                    {
                        userToAdd = Context.GetUserPermiso(permisoUserDTO.EmailUser);
                        if (!Equals(userToAdd, default))
                        {
                            if (userGranter.Id.Equals(userToAdd.Id))
                            {
                                result = Unauthorized();//no se puede dar permisos a si mismo
                            }
                            else if (userToAdd.IsValidated)
                            {
                                permisosOk = new List <string>();
                                for (int i = 0; i < permisoUserDTO.Permisos.Length; i++)
                                {
                                    permisoLow = permisoUserDTO.Permisos[i].ToLower();
                                    permiso    = await Context.Permisos.Where(p => p.Nombre.Equals(permisoLow)).FirstOrDefaultAsync();

                                    if (!Equals(permiso, default))
                                    {
                                        try
                                        {
                                            userPermiso = await Context.PermisosUsuarios.Where(p => p.PermisoId.Equals(permiso.Id) && p.UserId.Equals(userToAdd.Id)).FirstOrDefaultAsync();

                                            if (!Equals(userPermiso, default))
                                            {
                                                if (!userPermiso.IsActive)
                                                {//asi si no es necesario no pierde quien y cuando se dio por última vez.
                                                    userPermiso.GrantedBy   = userGranter;
                                                    userPermiso.GrantedDate = DateTime.UtcNow;
                                                    Context.PermisosUsuarios.Update(userPermiso);
                                                }
                                            }
                                            else
                                            {
                                                Context.PermisosUsuarios.Add(new UserPermiso(userGranter, userToAdd, permiso));
                                            }
                                            await Context.SaveChangesAsync();

                                            permisosOk.Add(permisoUserDTO.Permisos[i]);
                                        }
                                        catch { }
                                    }
                                }
                                result = Ok(permisosOk.Select(p => new PermisoDTO(p)));
                            }
                            else
                            {
                                result = this.NotValidated();
                            }
                        }
                        else
                        {
                            result = NotFound();
                        }
                    }
                    else
                    {
                        result = Unauthorized();
                    }
                }
                else
                {
                    result = BadRequest();
                }
            }
            else
            {
                result = this.NotLoggedIn();
            }

            return(result);
        }