4 Réponses :
Pas sûr de comprendre votre question entièrement, mais cela pourrait aider. Dans une application de flacon, j'utilise le flacon-directeur pour une autorisation de rôle tel que l'administrateur et l'éditeur, et je l'utilise également pour la protection des ressources granulaires, comme décrit dans le DOCS PRINCIPAL-PRINCIPAL . Dans mon cas, je vérifie si un utilisateur a la permission d'accéder à un compte particulier. Dans chaque vue, l'identité est chargée et la permission est vérifiée.
dans la vue la permission personnalisée fort>: p> et dans la fonction de chargeur d'identité
Alors que le flacon-directeur est le plugin le plus populaire, il est inutile compliqué et cela ne fonctionne tout simplement pas dans la plupart des cas dont j'en ai besoin. J'ai essayé de le forcer à travailler comme je l'aime, mais je n'ai jamais réussi. Heureusement, j'ai trouvé un module extrêmement simple et léger - Permission :
Tout d'abord, vous devez définir vos propres règles par sous-classement alors vous définissez les autorisations par sous-classement Il y a 4 façons d'utiliser le Vous devez d'abord injecter vos autorisations définies sur le contexte de modèle: p> puis dans les modèles: P> règle code> puis
remplacer
check () code> et
refus () code>: p>
autorisation code> et remplacement
règle () code>: p>
userpermission code> défini ci-dessus: p>
avec code> instruction) strong> p>
Ma réponse est basée sur l'hypothèse que vous savez déjà à quel point les œuvres principales du flacon et comment il est intégré à la base de données.
Premièrement, nous n'avons besoin que de stocker les besoins dans la base de données,
Si vous ne savez pas pourquoi, je ne vous recommande pas de lire ma réponse ci-dessous forte> p> puis de votre question, nous devons modifier un article, comment le contrôler? p> identité de l'utilisateur p> puis l'utilisateur a la permission de modifier l'article. Ci-dessous est de savoir comment je résolvez ce problème em> p> parce que l'autorisation par défaut.Require () ne fournit aucun argice à transmettre, donc je définis mon propre Permisson et IdentityContext et passer dans l'ID d'article et le modèle d'article, alors je vérifie l'utilisateur_id de l'article avec le login de flacon CURCENT_USER.ID P> @Permission (besoin ('Edit', 'Article'))). Exiger () Code> retournera vrai pour chaque article, même si l'utilisateur n'est pas l'auteur de l'article, c'est votre problème, non ?? P>
class MyPermission(Permission):
pass
class MyIdentityContext():
pass
Tout ce que je peux trouver sur ce sujet semble trop obtus. Bien que pas ce que je souhaite initialement, j'ai décidé de manipuler simplement cela manuellement dans mes fonctions de vue. Il est plus explicite et réduit les requêtes supplémentaires contre la base de données. Notez que j'utilise toujours Flack-Security Code> pour son authentification basée sur le rôle hors de la case (qui est toujours implémentée via
flacon-directeur code> via son @Roles_Accepté ("rôle") code> décorateur.
@app.route('/my_accounts/', methods = ['GET'])
@app.route('/my_accounts/<int:id>/', methods = ['GET'])
@roles_accepted('client')
def my_accounts(id=None):
if id:
account = Account.query.get_or_404(id)
if account.owner == current_user:
return render_template("my_account.html",
title = "Account: {0}".format(account.name),
account = account)
else:
abort(403)
accounts = Account.query.filter_by(owner=current_user).all()
return render_template("my_accounts.html",
title = 'My Accounts',
accounts = accounts)
tu toucha mon coeur
Hé avez-vous trouvé une solution pour cela?
Nope et moi avons arrêté d'utiliser du ballon à cause de cela et d'autres problèmes non facilement résolvables en fiole. J'utilise maintenant Webob plutôt que pour un contrôle total.
Voici le problème connexe sur le flacon-Github: GITUB.COM/MATTUPSTAT/FLASK-PRINCIPAL / Problèmes / 6