4 votes

PHP : Architecture du mécanisme de contrôle d'accès

J'ai une application PHP qui possède un mécanisme de contrôle d'accès basé sur les identifiants de navigation des pages individuelles. Ainsi, un utilisateur peut avoir accès aux pages 1, 4, 5, par exemple. Les identifiants de navigation ne sont pas statiques, de nouvelles pages (et donc de nouveaux identifiants de navigation) peuvent être générées par l'utilisateur administrateur. Et j'ai une sorte d'architecture orientée services. J'ai donc des services qui sont appelés depuis le client par JSON mais aussi depuis le côté serveur par des classes PHP (contrôleurs) directement. Le problème que j'ai est que j'ai besoin d'un mécanisme de contrôle d'accès pour les services. Et j'aimerais qu'il soit séparé des services eux-mêmes.

Les services renvoient des objets d'affaires. Tous ces BO ont une certaine "connexion" avec un objet, qui a un identifiant de navigation. Par exemple, un service renvoie des images : Image.page-->Page.navID ou le service renvoie des dimensions (n-n) : Dimension-->DimImageConnector-->Image.page-->Page.navID.

Je n'arrive pas à imaginer une solution propre pour vérifier les droits d'accès. La recherche d'un identifiant de navigation dans les objets d'entreprise ne semble pas être une solution simple et efficace.

Ce serait bien d'avoir des idées pour mon architecture de contrôle d'accès.

Merci !

BTW : J'utilise un cadre d'annotation, donc une possibilité est de spécifier certaines informations d'accès directement par la méthode de service.

1voto

David Conde Points 2935

Mon idée est un peu compliquée à mettre en œuvre, mais je pense qu'elle résout le problème. Elle a un problème avec votre demande, et c'est qu'elle n'est pas séparée des services en soi.

Imaginez cette idée. Vous avez une classe de service de base avec une méthode IsCallable qui indique si l'utilisateur actuel peut appeler le service.

De cette classe de service vous héritez, NonAuthenticatedService et AuthenticatedService. Après cela, il ne vous reste plus qu'à créer une fabrique de services pour récupérer les services et les appeler.

Je laisse ici une idée graphique de mes difficultés. Désolé pour les graphiques, c'est juste Power Point, parce que je ne suis pas un fan des outils CASE. :)

Sample Hierarchy

J'espère pouvoir vous aider !

0voto

evan Points 4825

Si les nav-ids changent et que les autorisations sont basées sur les nav-ids, vous devrez remapper tous les nav-ids à chaque changement.

La méthode la plus simple serait probablement d'avoir un tableau qui associe les utilisateurs aux pages (et non aux nav-ids). Vous pourriez modifier ce que vous avez ou créer une nouvelle table. Ensuite, il y a une autre table qui associe les pages à leur nav-id actuel. Pour vérifier si un utilisateur a accès, vous joignez les deux tables.

Il ne vous reste plus qu'à mettre à jour la table de correspondance à chaque fois que les nav-ids changent.

Je vous recommande d'étudier une méthode permettant de ne pas modifier les repères de navigation. Vous pouvez également ajouter un identifiant statique à utiliser avec le nav-id. De cette façon, vous pouvez simplement faire référence aux ids statiques et laisser les nav-ids changer autant qu'ils le souhaitent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X