Nous avons refacturé notre application d'administration basée sur le Web (encore une fois) et nous sommes restés un peu bloqué en décrivant les permissions impliquées dans ce que nous appelions les opérations CRUD (créer-lire-mettre à jour-supprimer). Nous avons constaté que simplement essayer de décrire une action/autorisation en termes de CRUD ne s'applique pas vraiment à une application web. Il semble que CRUD en tant que concept est réparti sur la portée des données - à la fois dans la base de données et dans le modèle d'application:Une meilleure façon de décrire CRUD dans une application web?
Scope Permissions Example
----- ----------- -------
Table READ I can view a list of all orders
Row READ | CREATE | DELETE I can view an individual product, I can create a new product and I can delete it from the database
Field READ | UPDATE I can view and update a customer's username
Nous sommes aux prises pour arriver à une table d'autorisations concise sans mélanger la portée . Par exemple, si je veux créer un nouveau produit, je dois avoir accès à la table des produits, LIRE et CRÉER une ligne de produits, et avoir un accès READ et UPDATE au champ du nom du produit ... ce qui représente un total de un arbre d'autorisations très salissant! À l'heure actuelle, nous avons des méthodes stupides comme hasAccess($object, $user_ID)
partout et imbriqués 'n' niveaux profonds dans les déclarations if/else pour répondre à la situation ci-dessus.
Existe-t-il d'autres moyens bien connus de décrire les autorisations utilisateur sans recourir à CRUD?
Merci pour votre aide!
(et, avant de vous demander, oui, nous avons examiné de nombreux cadres pour voir comment ils le font, et non, je ne peux pas voir mon exemple dans la documentation!)
Je pense que le problème que nous avons rencontré est que le modèle de sécurité de la base de données a également trouvé sa place dans les modèles d'application. Les autorisations dont j'ai parlé ci-dessus encapsulent à la fois le modèle de domaine et les objets métier. Essentiellement, toute la sécurité doit se produire dans l'application, car ce serait un cauchemar de maintenance pour maintenir la sécurité de la base de données et de l'application et puisque tout accès externe est routé via une API d'application. Nous avons donc du code désordonné dans l'application car le produit CREATE peut autoriser l'accès à certains champs pour un utilisateur, ce qu'un autre utilisateur pourrait ne pas avoir. – boatingcow
Marqué comme réponse. En fin de compte, il semble qu'il n'y a aucun moyen d'éviter les permissions imbriquées et une permission comme 'create_product' est vraiment composée de plusieurs permissions 'parent' comme' edit_product_name', 'edit_product_description' etc. L'astuce consiste à gérer les nombreux noms impliqués. – boatingcow