Django sera-t-il un bon choix pour une application Web basée sur les autorisations?

StackOverflow https://stackoverflow.com/questions/232008

  •  04-07-2019
  •  | 
  •  

Question

J'explore les détails de Django depuis environ une semaine et j'aime ce que je vois. Cependant, je suis tombé sur une certaine ... négativité en ce qui concerne le contrôle fin des autorisations sur l'interface CRUD.

Ce que j'écris est une application Web de gestion de client Intranet. L'organisation compte environ 6 niveaux et je dois limiter l'accès aux groupes de clients en fonction de ces niveaux. En expansion constante. J'ai une assez bonne idée de la façon dont je vais procéder, mais je ne suis pas sûr de pouvoir l'intégrer correctement à l'interface d'administration pré-construite.

J'ai fait un développement absolument zéro pour Django, sinon j'aurais probablement une meilleure idée de savoir si cela fonctionnerait ou non. Je n'utiliserai probablement pas Django si l'interface d'administration générée va être inutile pour ce projet - mais comme je l'ai dit, il y a une grande dépendance sur des autorisations personnalisées très précises.

Django me permettra-t-il de créer des autorisations / règles personnalisées et de l'intégrer de manière transparente dans l'interface CRUD d'administration?

Première mise à jour: je souhaite utiliser l’application admin pour réduire le nombre d’interfaces CRUD générées, alors je considère que c’est un must.

Deux mises à jour:

Je souhaite décrire les autorisations requises pour ce projet.

Un client peut appartenir à un ou plusieurs "magasins". Les employés à temps plein ne devraient pouvoir éditer les clients que dans leur magasin (même s'ils appartiennent à un autre magasin). Cependant, ils ne devraient pas pouvoir voir / éditer les clients dans un autre magasin. Les utilisateurs occasionnels devraient uniquement pouvoir afficher les clients en fonction du magasin dans lequel ils sont également répertoriés (ou si l'utilisateur occasionnel est connecté en tant qu'utilisateur du magasin - plus probablement).

La direction supérieure doit pouvoir voir tous les employés des magasins qu’elle gère, rien de plus.

Les cadres supérieurs devraient pouvoir modifier TOUS les employés et accorder des autorisations en dessous d'eux-mêmes.

Après avoir lu la documentation de Django, il est indiqué que vous ne pouvez pas (automatiquement) attribuer des autorisations pour un sous-ensemble d'un groupe. Seul le groupe entier. Est-il assez facile de simuler vos propres autorisations à cette fin?

Était-ce utile?

La solution

Si je lis correctement vos exigences mises à jour, je ne pense pas que le système d'authentification existant de Django sera suffisant. Il semble que vous ayez besoin d’un système de contrôle d’acquisition complet.

Ce sujet a été abordé à plusieurs reprises. Essayez de googler sur django + acl.

Échantillonnages aléatoires ...

Il y a deux ans, il y avait un projet Summer of Code, mais je ne sais pas trop où ils en sont. Voir http://code.djangoproject.com/wiki/GenericAuthorization

.

Un nouveau ticket sur djngoproject.org pourrait être intéressant:

Il y a des extraits de code intéressants sur dumpz.org:

... mais il n'y a aucun document.

Bonne chance!

Autres conseils

Le système de permission de Django régit totalement. Chaque modèle dispose d'un ensemble d'autorisations par défaut. Vous pouvez également ajouter de nouvelles autorisations à vos modèles.

Chaque utilisateur possède un ensemble d'autorisations ainsi que des appartenances à un groupe. Les utilisateurs individuels peuvent avoir des autorisations individuelles. Et ils héritent des autorisations de leur appartenance à un groupe.

Vos fonctions d'affichage (et vos modèles) peuvent facilement vérifier la présence d'absence de ces autorisations à tout niveau de granularité que vous devez utiliser.

Et si cela ne vous suffit pas, l’add-on Profil vous offre encore plus d’options pour définir un " Utilisateur " et leurs capacités, autorisations, rôles, responsabilités, etc.

Et si cela ne vous suffit pas, vous pouvez définir vos propres schémas d'authentification.

L'important n'est pas d'essayer de définir des groupes qui sont de véritables sous-ensembles d'utilisateurs, mais pas par hasard des titres ou des rôles définis. Vous n'avez jamais besoin de "définir des autorisations pour un sous-ensemble d'un groupe". Vous devez avoir des groupes plus petits. Groupes définis autour de sous-ensembles de personnes.

Les autorisations par défaut de Django concernent l'accès au modèle, pas l'accès aux lignes dans un modèle. Par contre, votre problème concerne des sous-ensembles de lignes dans plusieurs modèles: Client, Magasin, Employé, Gestionnaire.

Vous aurez besoin d'un ensemble de base de FK parmi ces éléments, ainsi que de filtres pour sous-définir les lignes. Vous pouvez avoir du mal à faire cela avec les pages d'administration par défaut. Vous aurez peut-être besoin de votre propre version de l'administrateur pour utiliser des filtres spécialisés.

Si vous ne pouvez pas le faire avec le système de permissions Django, vous devriez repenser vos cas d'utilisation. Sérieusement.

[L’interface Django-REST, en revanche, est une toute autre bête et nécessite quelques soins et une alimentation particulière.]

Les objets ModelAdmin ont Méthodes has_add_permission , has_change_permission , has_delete_permission et queryset pouvant être utilisées pour imposer des autorisations sur ce que l'utilisateur connecté peut voir et modifier - vous pouvez créer une sous-classe qui les utilise pour appliquer les autorisations que vous souhaitez implémenter et enregistrer tous vos modèles avec l'application admin à l'aide de votre sous-classe.

Cependant, tout dépend de la manière dont votre système de permissions fonctionnera. Quelles sont les exigences exactes qui ne correspondent pas à vos autorisations détaillées? Plus vous vous éloignez de ce que l'application admin a été conçue, plus elle vous demandera du travail, mais il y a de nombreux points d'ancrage que vous pouvez utiliser pour mettre en œuvre vos exigences personnalisées. Voici un article de blog de Luke Plant qui donne des exemples de certaines des plus belles vous pouvez faire le réglage sans avoir à creuser trop profondément.

Faut-il absolument qu'il soit basé sur l'application admin ? Vues génériques et ModelForms peut prendre en charge de nombreux éléments fastidieux impliqués dans implémentant CRUD, méfiez-vous de ne pas trop vous attendre à personnaliser admin - c'est presque une tradition de Django de commencer par se bloquer sur l'application admin et ce qu'il peut et ne peut pas faire, pensant au départ que vous ne devrez plus jamais écrire de code ;)

À partir de django 1.2, les autorisations au niveau de la ligne sont prises en charge, ce que django-guardian rend très intuitif à manipuler.

Vous pouvez également consulter le Monkeypatch des autorisations granulaires: http://code.google.com/p/django-granular-permissions/

Il ajoute des autorisations au niveau des lignes au système d'autorisation de Django.

Je viens de trouver http://bitbucket.org/jezdez/django-authority/ , cela semble prometteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top