Fermer

mai 11, 2020

Création d'un fichier YAML personnalisé pour l'outil de contrôle d'accès


Dans mon article précédent j'ai expliqué comment ajouter des utilisateurs de service au fichier YAML exporté par l'outil AC. Mais que se passe-t-il si vous voulez faire autre chose qui n'est actuellement pas possible sans recompilation?

Il peut y avoir plusieurs raisons de créer un fichier personnalisé, la raison pour laquelle je l'ai fait était d'inclure les membres de mes groupes dans la sortie YAML afin que je peux gérer les appartenances aux groupes (quand je le souhaite).

Qu'est-ce qu'un fichier YAML

Les fichiers YAML ne sont pas aussi courants dans les projets JAVA. Donc, pour beaucoup d’entre nous, nous n’avons tout simplement pas eu grand besoin de les utiliser. En termes simples, un fichier YAML n'est qu'un fichier au format texte en retrait. La quantité d'indentation sur une entrée dicte son placement dans la hiérarchie.

My Disclaimer

Avant d'utiliser tout ce que vous créez, veuillez tester soigneusement. Un mauvais fichier YAML dans l'outil AC peut casser beaucoup de choses. Veuillez vous assurer que cela ne vous arrive pas et gardez cela à l'esprit lorsque vous créez vos fichiers:

Tous les utilisateurs ou groupes que vous gérez dans votre fichier de configuration (sections group_config et user_config) doivent avoir leurs ACL dans le même fichier YAML. Si vous essayez de déployer des utilisateurs et des groupes sans leurs autorisations, vous pouvez (et probablement perdrez) les ACL.

Ceci est documenté ici:

https://github.com/Netcentric/accesscontroltool/blob /develop/docs/AdvancedFeatures.md[19459004diplomatique19659003E5ECustomYAMLServlet

Vous pouvez choisir d'implémenter ces différentes manières. Depuis que j'ai écrit ce code, j'ai en fait implémenté un tableau de bord personnalisé. Mais un servlet est idéal pour commencer, car vous pouvez le lier, mais vous pouvez également l'utiliser à partir d'autres zones de votre code, ainsi qu'en appuyant directement sur l'URL (GET).

L'essentiel lors de l'écriture de votre servlet est vraiment pour obtenir le bon formatage.

1.) Vous aurez probablement trois zones de configuration (group_config, user_config et ac_config). Il est possible de ne pas inclure user_config, mais assurez-vous également de ne pas générer d’ACL pour ces utilisateurs dans votre YAML.

2.) Vous devrez indenter en fonction de la hiérarchie. Voici quelques constantes (le code netcentric les utilise également)

 public static final int DUMP_INDENTATION_KEY = 4;
final statique public int DUMP_INDENTATION_FIRST_PROPERTY = 7;
final statique public int DUMP_INDENTATION_PROPERTY = 9;
final statique public int DUMP_INDENTATION_PROPERTY_SUB = 11;
public static final String YAML_STRUCTURAL_ELEMENT_PREFIX = "-"; 

Les éléments de niveau supérieur ne nécessitent pas d'indentation (group_config, user_config et ace_config)

Rédaction du code

 Expérience client et conception - Créez une meilleure expérience client avec AEM sur Microsoft Azure

Encore une fois, j'ai choisi un servlet car c'est un moyen facile de le faire, mais vous pouvez utiliser d'autres méthodes.

Toutes les données dont nous avons besoin pour nos fichiers sont facilement disponibles dans AEM.

1 .) Générez votre section group_config. (J'ai choisi d'utiliser des requêtes mais vous pouvez également utiliser l'API UserManagement)

 Itérateur  groups = resolver.findResources ("SELECT * FROM [rep:Group] AS nœuds OERE ISDESCENDANTNODE ([/home/groups]) ORDER BY nœuds. [rep:principalName] ", Query.JCR_SQL2); 

Une fois que vous avez les ressources de votre groupe, vous pouvez les itérer et les ajouter à une liste. À ce stade, vous pouvez soit ajouter l'objet de groupe, soit créer un objet personnalisé avec les attributs que vous prévoyez d'utiliser. À tout le moins, vous aurez besoin du groupID, du chemin et du memberOf. Comme je l'ai mentionné précédemment, je faisais cela pour obtenir les membres, si vous envisagez d'ajouter des membres, collectez également les membres déclarés du groupe.

Cette liste sera utilisée plus tard pour extraire les informations acl nécessaires, car n'oubliez pas qu'elles doivent correspondre. [19659015] while (groups.hasNext ()) {

}

2.) Si vous incluez des utilisateurs système, suivez le même processus et ajoutez-les à une nouvelle liste.

 Itérateur  userResources = resolver.findResources ("SELECT * FROM [rep:SystemUser] AS nœuds OERE ISDESCENDANTNODE ([/home/users]) Noeuds ORDER BY. [rep:principalName] ", Query.JCR_SQL2); 

Vous devrez peut-être utiliser des chemins différents ici, selon les utilisateurs système que vous prévoyez d'inclure.

3.) Collectez le

Utilisez les listes que vous avez créées ci-dessus pour itérer toutes les acls liées aux principes de groupe et d'utilisateur. Faites cela pour chaque utilisateur et groupe.

 Iterator  repResources = resolver.findResources ("SELECT * FROM [rep:ACE] WHERE [rep:principalName] = '" + principal + "'", Query.JCR_SQL2); 

We utilisez rep: ACE pour que nous puissions tous les obtenir en même temps, mais vous devrez faire la distinction entre les stratégies d'autorisation et de refus. Ainsi, lorsque vous stockez vos données dans une LISTE, assurez-vous de savoir comment les différencier. Vous pouvez créer un objet personnalisé et stocker les informations, puis ajouter cet objet à la liste.

 if (vm.get ("jcr: primaryType"). ToString (). EqualsIgnoreCase ("rep: GrantACE")) {
  type = "autoriser";
} 

Au moins, vous aurez besoin du nom du Principe, du type (autoriser ou refuser), du chemin, des privilèges et des restrictions.

Une fois que vous avez collecté toutes les données, il est temps de les écrire.

Pour chacun des éléments ci-dessus:

1.) Écrivez l'en-tête et une configuration pour chaque liste.

2.) N'oubliez pas de mettre en retrait correctement.

3.) Testez sur un local que vous n'êtes pas trop attaché en cas de problème.






Source link