2017-09-27 6 views
0

Nous avons un système basé sur des objets dynamiques - il existe donc une table de métadonnées qui décrit ces objets. Par exemple, l'organisation A peut avoir un objet entrepôt, un objet client et un objet vente. L'organisation B peut avoir un objet vente et un objet clown.Objets oData, Yii2 et Dynamic

Les utilisateurs s'authentifient sur notre API de repos basée sur le framework Yii2. Ils s'authentifient à l'aide d'un appel à/user/authenticate, puis ils recherchent des objets en utilisant/object/pour la liste/create et/object // pour Read, Update, Delete. Le problème avec ceci est: Si un développeur doit s'intégrer dans le service, il devrait connaître tous les objets qui ont été définis dans son organisation, y compris les champs disponibles pour lesquels il peut lire/écrire. Ce que nous aimerions faire, c'est fournir une option pour décrire nos données.

E.g. Ma première pensée serait d'exposer quelque chose comme/objet/métadonnées dans lequel je répondrais avec une liste json de ressources que l'utilisateur est autorisé à accéder, par exemple. un entrepôt Un utilisateur verrait Warehouse, Client, Sale. Où un utilisateur Org B verrait Sales, Clown.

On m'a demandé de regarder oData comme une spécification pour cela, mais oData semble définir toute une convention de choses (url, recherche et filtrage, etc).

Est-il sensé d'implémenter une partie de la spécification oData ou de l'utiliser comme guide et de garder nos URL identiques? Y a-t-il une partie de la spécification oData qui se prête à la description d'une ressource dynamique (par exemple si l'utilisateur utilise notre système pour ajouter une colonne à l'objet Ventes - l'API doit refléter cela).

Je vous serais reconnaissant de bien vouloir concevoir/suivre cette exigence.

Merci!

Répondre

0

J'ai créé une solution de suivi:

  • étendent dektrium/yii2-RBAC, où assigments ajouter société de colonne
  • dans chaque module (werhause, factures, ..) a créé des rôles objets
  • rôles objet a des méthodes: canAssign(), canView(), canRemove() pour l'administration de l'utilisateur
  • Le panneau d'administration de l'utilisateur rassemble tous les rôles de tous les modules (analyse en tant que fichiers) et affiche regroupés par modules.

Cette solution permet à l'utilisateur de commutation entre les entreprises et pour les utilisateurs attribuer des droits d'accès différents à différentes entreprises et le contrôle des droits de gestion des utilisateurs assignant droits enter image description here

+0

Nous avons déjà mis en place un système RBAC. La question portait sur l'utilisation de la spécification oData pour décrire une API REST –

+1

Pour l'utilisation d'une entité odata.editLink et odata.readLink. si aucune odata.editLink définie - entité ne peut pas éditer. Pour les champs, ajoutez odata.editablefileds. – uldis

+0

nous avons décidé de lancer nos propres descripteurs - odata.editablefields est-il documenté? –