Encabezados de recursos dinámicos

Me gustaría tener un servicio que proporcione un recurso como en el siguiente código:

   angular.module('myApp.userService', ['ngResource'])
  .factory('UserService', function ($resource)
  {
    var user = $resource('/api/user', {},
          {
            connect: { method: 'POST', params: {}, isArray:false }
          });
    return user;
  }

Entonces cuando se usa elconnect acción, me gustaría pasar dinámicamente un encabezado HTTP, lo que significa que puede cambiar para cada llamada. Aquí hay un ejemplo, en el controlador, vea el comentario en el código:

 $scope.user = UserService;

 $scope.connect = function ( user )
        {
          var hash = 'Basic ' + Base64Service.encode(user.login + ':' + user.password);

          // I would like this header to be computed 
          // and used by the user resource
          //  each time I call this function
          $scope.user.headers = [{Authorization: hash}];

          $scope.user.connect( {},
              function()
              {
                  // successful login
                  $location.path('/connected');
              }
              ,function()
              {
                  console.log('There was an error, please try again');
              });
       }

¿Conoces una forma de hacerlo, ya sea directamente o por medio de un truco?

Pensamientos finales

La respuesta aceptada no responde completamente a la pregunta ya que los encabezados no son totalmente dinámicos porque la fábrica devuelve realmente una fábrica (!) Que no es el caso en mi código.

Como $ resource es una fábrica, no hay manera de hacerla dinámica.

Finalmente destruyo el objeto de recurso cada vez que el usuario se conecta. De esta manera, tengo el recurso con un encabezado calculado cuando el usuario se conecta.

La solución provista por @Stewie es útil para eso, así que la mantengo como aceptada.

Aquí es cómo hice la conexión, que se puede usar varias veces a medida que el recurso se destruye / vuelve a crear cuando (re) se conecta:

 this.connect = function (user)
 {
    self.hash = 'Basic ' + Base64Service.encode(user.login + ':' + user.password);
console.log("CONNECT login:" + user.login + " - pwd:" + user.password + " - hash:" + self.hash);

if (self.userResource)
{
  delete self.userResource;
}

self.userResource = $resource('/api/user/login', {}, {
  connect: {
    method: 'POST',
    params: {},
    isArray: false,
    headers: { Authorization: self.hash }
  }
});

var deferred = $q.defer();
self.userResource.connect(user,
  function (data)
  {
    //console.log('--------- user logged in ----- ' + JSON.stringify(data));
    // successful login
    if (!!self.user)
    {
      angular.copy(data, self.user);
    }
    else
    {
      self.user = data;
    }

    self.setConnected();

    storage.set('user', self);

    deferred.resolve(self);
  },
  function (error)
  {
    self.user = {};
    self.isLogged = false;

    storage.set('user', self);

    deferred.reject(error);
  }
);

return deferred.promise;

};

Respuestas a la pregunta(2)

Su respuesta a la pregunta