10
votes

Comment tester des autorisations de fichier à l'aide de nœud.js?

Comment puis-je vérifier pour voir les autorisations (lire / écrire / exécuter) qu'un processus d'exécution de nœud.js a sur un fichier donné?

J'espérais que le FS.Stats code> Objet a eu des informations sur les autorisations mais je ne vois aucun. Y a-t-il une fonction intégrée qui me permettra de faire de tels contrôles? Par exemple: P>

var filename = '/path/to/some/file';
if (fs.canRead(filename)) // OK...
if (fs.canWrite(filename)) // OK...
if (fs.canExecute(filename)) // OK...


2 commentaires

Je pense qu'il n'y a pas de fonction API pour cela.


En fait, il suffit d'aller de l'avant et d'essayer d'ouvrir le fichier et de la manipulation des erreurs éventuelles est généralement la bonne approche. Vous peut tester si le fichier est lisible, mais cela implique plus d'effort (même s'il est masqué dans les bibliothèques principales, le travail est toujours effectué).


4 Réponses :


1
votes

Vérification de la vérification La lisibilité n'est pas si simple, car les langues comme PHP le permettent de l'afficher en l'abstrayant dans une seule fonction de bibliothèque. Un fichier peut être lisible à tous, ou uniquement à son groupe, ou uniquement à son propriétaire; S'il n'est pas lillé à tout le monde, vous devrez vérifier si vous êtes un membre du groupe ou si vous êtes propriétaire du fichier. Il est généralement beaucoup plus facile et plus rapide (non seulement d'écrire le code, mais également d'exécuter les chèques) pour essayer d'ouvrir le fichier et de gérer l'erreur.


0 commentaires

-4
votes

Que diriez-vous d'utiliser un processus enfant ?

var cp = require('child_process');

cp.exec('ls -l', function(e, stdout, stderr) {
  if(!e) {
    console.log(stdout);
    console.log(stderr);
    // process the resulting string and check for permission
  }
});


3 commentaires

fs.stats Les objets fournissent déjà un mode , il n'est pas nécessaire d'exécuter un processus externe; En outre, les autorisations du fichier ne changent pas comme par magie en fonction de la personne qui cherche


@LANZZ, si le processus fonctionne dans un contexte utilisateur différent, il aurait des droits différents concernant l'accès des fichiers.


Comment un processus enfant serait-il exécuté sous un contexte utilisateur différent?



18
votes

Je suis en retard, mais je cherchais les mêmes raisons que la vôtre et j'étais appris à ce sujet.

fs.access code> est celui dont vous avez besoin. Il est disponible auprès du noeud V0.11.15. P>

function canWrite(path, callback) {
  fs.access(path, fs.W_OK, function(err) {
    callback(null, !err);
  });
}

canWrite('/some/file/or/folder', function(err, isWritable) {
  console.log(isWritable); // true or false
});


0 commentaires

3
votes

Il y a Fs.accesssync (chemin [ mode]) bien mentionné:

teste synchrone des autorisations d'un utilisateur pour le fichier ou le répertoire spécifié par chemin. L'argument de mode est un entier optionnel qui spécifie les contrôles d'accessibilité à effectuer. Vérifiez les constantes d'accès aux fichiers pour des valeurs possibles du mode. Il est possible de créer un masque constitué du bitwise ou de deux valeurs ou plus (par exemple. Fs.Constants.w_ok | fs.constants.r_ok).

Si l'une des vérifications d'accessibilité échoue, une erreur sera lancée. Sinon, la méthode reviendra non définie.

Exemple encastré: xxx


0 commentaires