Maison > développement back-end > Tutoriel Python > Version de PropelAuth Python

Version de PropelAuth Python

Mary-Kate Olsen
Libérer: 2024-12-20 08:34:10
original
869 Les gens l'ont consulté

PropelAuth Python velease

Aujourd'hui, nous sommes ravis de publier une nouvelle version de notre bibliothèque Python de base, ainsi que les versions de nos bibliothèques spécifiques au framework pour FastAPI, Flask et Django Rest Framework.

Passons à certains des changements les plus importants !

Meilleure prise en charge de la saisie (changement radical)

Si vous avez déjà utilisé nos bibliothèques Python, les indications de type laissaient beaucoup à désirer. Dans notre dernière version, nous avons désormais des indications de type pour toutes les requêtes ainsi que des types de données pour toutes les réponses.

PropelAuth Python velease

PropelAuth Python velease

REMARQUE : cela se brisera spécifiquement si vous déballiez auparavant (en utilisant l'opérateur **) les réponses. Les réponses étaient auparavant des dictées et sont désormais des types de données explicites.

Nous avons implémenté des fonctions couramment utilisées comme une recherche de clé (response["user_id"] fonctionnera toujours, mais réponse.user_id est désormais préféré). Nous essayons généralement d'éviter de briser les changements (c'est notre deuxième en 3 ans), mais cela nous semblait être un problème assez limité.

Améliorations de la classe d'utilisateurs

Pour une vérification plus simple des autorisations, vous pouvez désormais appeler des fonctions directement sur l'objet Utilisateur comme :

  • user.has_permission_in_org(orgId, 'can_export_reports')
  • user.is_role(orgId, 'Admin')
  • user.get_active_org().has_permission('api_key::write')

Ceux-ci vous permettent de faire circuler l'objet User au lieu d'avoir besoin de vous référer à l'objet Auth, et cela permet également de se moquer/tester plus facilement.

Nouvelles API

Ceci n'est pas spécifique à notre bibliothèque Python, mais nous avons publié de nombreuses nouvelles API comme :

  • Forcer la déconnexion de toutes les sessions utilisateur
  • Création d'un lien de configuration SAML pour votre client (qui lui permettra de gérer SAML lui-même)
  • Récupérer et révoquer les invitations en attente
  • Prise en charge de Legacy_org_id qui peut vous aider à migrer à partir de votre configuration existante

Voir la liste complète dans nos documents de référence ici.

Exemple – Contrôle simple des fonctionnalités par plan tarifaire

Chez PropelAuth, nous avons eu la chance d'être aux premières loges pour voir de nombreuses entreprises SaaS B2B se développer. Les fournisseurs d'authentification sont particulièrement importants aux moments critiques de l'histoire d'une entreprise (lancement initial, intégration de votre premier client, fermeture de votre premier client d'entreprise, etc.). La chose la plus importante que nous puissions faire à mesure que vous grandissez est de nous écarter du chemin.

C'est pourquoi nous sommes vraiment satisfaits de cette route FastAPI :

@app.post("/api/expensive-action")
async def do_expensive_action(user: User = Depends(auth.require_user)):
    org = user.get_active_org()

    if org == None or \
       not org.user_has_permission("can_do_expensive_action"):
        raise HTTPException(status_code=403, detail="Forbidden")

    return do_expensive_action_inner(user, org)

Copier après la connexion
Copier après la connexion

À première vue, cet itinéraire semble assez simple, mais il comporte quelques éléments importants :

  • L'utilisateur injecté par dépendance fonctionne avec tout type d'utilisateur authentifié - qu'il s'agisse d'un mot de passe, d'un SSO, d'un SAML, etc.
  • Grâce aux mappages de rôles, nous pouvons faire en sorte qu'un administrateur d'une organisation sur notre forfait gratuit puisse pas utiliser la fonctionnalité coûteuse, mais qu'un administrateur d'une organisation sur nos forfaits payants peut faire l'action coûteuse.
  • Nous pouvons appliquer cela par programmation en gérant un webhook de notre fournisseur de paiement et en définissant leur mappage de rôles, comme ceci :
@app.post("/api/expensive-action")
async def do_expensive_action(user: User = Depends(auth.require_user)):
    org = user.get_active_org()

    if org == None or \
       not org.user_has_permission("can_do_expensive_action"):
        raise HTTPException(status_code=403, detail="Forbidden")

    return do_expensive_action_inner(user, org)

Copier après la connexion
Copier après la connexion
  • Nous pouvons même leur donner un accès en libre-service à des fonctionnalités avancées telles que SAML et SCIM en générant par programme une URL de connexion SAML, qui guidera votre utilisateur dans la configuration de ces fonctionnalités - avec des instructions spécifiques pour chaque fournisseur d'identité (Okta, Azure AD , ADFS, etc.).

Et le meilleur ? Le même extrait de code ci-dessus continuera à fonctionner. Même si les exigences de nos clients deviennent plus compliquées, votre code ne le sera pas.

Des questions ? Retour?

Nous cherchons toujours à améliorer nos bibliothèques et nos services en fonction de vos commentaires. Si vous avez des questions sur cette version ou des suggestions d'améliorations futures, n'hésitez pas à nous contacter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal