4 Réponses :


1
votes

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 : xxx

la permission personnalisée : xxx

et dans la fonction de chargeur d'identité : xxx


0 commentaires

1
votes

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 :

Utilisation

Tout d'abord, vous devez définir vos propres règles par sous-classement règle puis remplacer check () et refus () : xxx

alors vous définissez les autorisations par sous-classement autorisation et remplacement règle () : xxx

Il y a 4 façons d'utiliser le userpermission défini ci-dessus:

1. Utiliser comme décorateur de vue xxx

2. Utilisez dans la vue des codes xxx

3. Utilisez-les dans les codes de vue (en utilisant avec instruction) xxx

4. Utilisation dans les modèles Jinja2

Vous devez d'abord injecter vos autorisations définies sur le contexte de modèle: xxx

puis dans les modèles: xxx


0 commentaires

0
votes

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> xxx pré>

identité de l'utilisateur p> xxx pré>

puis l'utilisateur a la permission de modifier l'article. @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>

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>

class MyPermission(Permission):
    pass


class MyIdentityContext():

    pass


0 commentaires

1
votes

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)


1 commentaires

tu toucha mon coeur