Maison développement back-end Tutoriel Python Système d'authentification des utilisateurs Django (3) groupes et autorisations

Système d'authentification des utilisateurs Django (3) groupes et autorisations

Dec 23, 2016 pm 05:42 PM

Le système d'autorisation de Django est très simple, il peut accorder des autorisations à des utilisateurs ou à des utilisateurs en groupe.

Le backend d'administration de Django utilise ce système d'autorisation, mais il peut également être utilisé dans votre propre code.

L'objet utilisateur a deux champs ManyToManyField, groupes et user_permissions

groups = models.ManyToManyField(Group, verbose_name=_('groups'),
blank=True, help_text=_ ( 'Les groupes auxquels cet utilisateur appartient.                                                                                                                                    name="user_set", Related_query_name="user")
user_permissions = models.ManyToManyField(Permission,
verbose_name=_('autorisations utilisateur') , blank=True,
help_text=_('Autorisations spécifiques pour cet utilisateur.'),
Related_name= "user_set", Related_query_name="user")


Vous pouvez y accéder comme les autres modèles Django :

myuser.groups = [group_list]

myuser.groups add(group, group, ...)

myuser.groups.remove(group, group, .. .)

myuser.groups.clear()
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, autorisation, ...)
myuser.user_permissions.clear()


Autorisations

L'autorisation existe en tant que modèle. Établir une autorisation consiste à créer une instance de l'autorisation. Modèle.

@python_2_unicode_compatible

class Permission(models.Model):

"""

Le système d'autorisations fournit un moyen d'attribuer des autorisations à des
utilisateurs et groupes d'utilisateurs spécifiques.

Le système d'autorisation est utilisé par le site d'administration de Django, mais peut également être
utile dans votre propre code. Le site d'administration de Django utilise les autorisations comme suit :

- Les limites d'autorisation "ajouter". la possibilité de l'utilisateur d'afficher le formulaire "ajouter"
          et d'ajouter un objet.
- L'autorisation "supprimer" limite la possibilité de supprimer un objet.

Les autorisations sont définies globalement par type d'objet. , pas par objet spécifique
instance. Il est possible de dire "Mary peut changer les actualités", mais il n'est
actuellement pas possible de dire "Mary peut changer les actualités, mais seulement celles
celles qu'elle a créées elle-même. " ou "Mary ne peut modifier que les actualités qui ont un
certain statut ou une certaine date de publication."

Trois autorisations de base -- ajouter, modifier et supprimer -- sont automatiquement
créées pour chaque modèle Django .
"""
name = models.CharField(_( 'name'), max_length=255)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_(' codename'), max_length=100)
objects = PermissionManager()

class Meta:
verbose_name = _('permission')
verbose_name_plural = _('permissions')
unique_together = (('content_type', 'codename'),)
order ing = ('content_type__app_label', 'content_type__model',
                                                                                                                         six. Text_type (self.Content_type.app_label),
Six.text_type ( Self.Content_type),
SIX.Text_type (Self.Name))

DEF Natural_key (Self):
Return ( self.codename,) self.content_type.natural_key()
natural_key .dependencies = ['contenttypes.contenttype']


champs champs

nom : obligatoire. 50 caractères ou moins, par exemple, « Can Vote »

content_type : obligatoire, une référence à la table de base de données django_content_type, qui contient des enregistrements pour chaque modèle de l'application.

nom de code : obligatoire, 100 caractères ou moins, par exemple "can_vote".

Si vous souhaitez créer des autorisations pour un modèle :

à partir de django.db importer des modèles

class Vote(models.Model):
...

class Meta :
permissions = (("can_vote", "Can Vote"),)

Si ce modèle est dans l'application foo, les autorisations sont exprimées sous la forme 'foo. can_vote' , vérifiez si un utilisateur dispose des autorisations myuser.has_perm('foo.can_vote')

Autorisations par défaut autorisations par défaut

Si django.contrib.auth a été configuré dans INSTALLED_APPS, il sera garanti. Chaque modèle Django dans les applications installées crée 3 autorisations par défaut : ajouter, modifier et supprimer.

Ces autorisations sont créées la première fois que vous exécutez manage.py migrate (syncdb avant 1.7). À ce moment-là, tous les modèles auront des autorisations établies. Les nouveaux modèles créés après cela disposeront de ces autorisations par défaut créées lors de la nouvelle exécution de manage.py migrate. Ces autorisations correspondent aux comportements de création, de suppression et de modification dans l'interface de gestion de l'administrateur.

Supposons que vous ayez une application foo avec une barre de modèle, vous pouvez utiliser la méthode suivante pour tester les autorisations de base :

ajouter : user.has_perm('foo.add_bar')
change : user.has_perm('foo.change_bar')
delete : user.has_perm('foo.delete_bar')
Le modèle d'autorisation n'est généralement pas utilisé directement.

Groupes

Le groupe existe également en tant que modèle :

@python_2_unicode_compatible
class Group(models.Model):
"""
Les groupes sont une manière générique de catégoriser les utilisateurs pour appliquer des autorisations, ou
une autre étiquette, à ces utilisateurs. Un utilisateur peut appartenir à n'importe quel nombre de
groupes.

Un utilisateur d'un groupe possède automatiquement tous les éléments. autorisations accordées à ce
groupe. Par exemple, si le groupe Éditeurs du site dispose de l'autorisation
can_edit_home_page, tout utilisateur de ce groupe aura cette autorisation.

Au-delà des autorisations, les groupes sont un moyen pratique de le faire. catégorisez les utilisateurs pour
leur appliquer une étiquette ou une fonctionnalité étendue. Par exemple, vous
pouvez créer un groupe « Utilisateurs spéciaux » et vous pouvez écrire du code qui
fera des choses spéciales à ces utilisateurs -. - comme leur donner accès à une
partie réservée aux membres de votre site, ou leur envoyer des e-mails
réservés aux membres.
"""
name = models.CharField(_(' name '), max_length=80, unique=True)
permissions = models.ManyToManyField(Permission,
verbose_name=_('permissions'), blank=True)

objects = GroupManager()

class Meta :
verbose_name = _('group')
verbose_name_plural = _('groups')

def __str__(self):
return self.name

def natural_key(self):
return (self.name,)

fields :

name : obligatoire, 80 caractères ou moins, par exemple, « Utilisateurs géniaux ».

permissions:ManyToManyField à Permission

group.permissions = [permission_list]
group.permissions.add(permission, permission, ...)
group.permissions.remove( permission, permission, ...)
group.permissions.clear()

Création d'autorisations par programmation

En plus d'utiliser la méta modèle pour créer des autorisations, vous pouvez également utiliser code créer directement.

Par exemple, créez une autorisation can_publish pour le modèle BlogPost dans l'application myapp :

from myapp.models import BlogPost
from django.contrib.auth.models import Group, Permission
depuis django.contrib.contenttypes.models importez ContentType

content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(codename='can_publish',
                     name= 'Peut publier des messages',
Content_type = Content_type)

les autorisations peuvent être accordées à un objet utilisateur via ses user_permissions ou à un groupe via son attribut Permissions.

Mise en cache des autorisations

Les autorisations de l'utilisateur peuvent être mises en cache lorsqu'elles sont cochées. Si une nouvelle autorisation est accordée à un utilisateur, elle ne sera pas vérifiée si elle est vérifiée immédiatement. Le moyen le plus simple consiste à récupérer l’objet User.

depuis django.contrib.auth.models import Permission, User
depuis django.shortcuts import get_object_or_404

def user_gains_perms(request, user_id):
user = get_object_or_404(User, pk=user_id) )
#La vérification des autorisations mettra en cache l'ensemble d'autorisations actuel
user.has_perm('myapp.change_bar')

permission = Permission.objects.get(codename='change_bar')
user .user_permissions.add(permission)

# Vérifier l'ensemble de cache d'autorisations
user.has_perm('myapp.change_bar') # False

# Demander une nouvelle instance
user = get_object_or_404( Utilisateur, pk=user_id)

# Le cache des autorisations est repeuplé à partir de la base de données
user.has_perm('myapp.change_bar') # True

...

Décorateur d'autorisations

permission_required(perm[, login_url=None, raise_exception=False])

Vérifie si l'utilisateur dispose d'une certaine autorisation, similaire à @login_required()

de django.contrib.auth.decorators import permission_required

@permission_required('polls.can_vote', login_url='/loginpage/')
def my_view(request):
 …

Autorisations dans le modèle

Les autorisations de l'utilisateur sont stockées dans la variable du modèle {{ perms }}, qui est une instance de django.contrib.auth.context_processors.PermWrapper.

{{ perms.foo }}

L'attribut unique ci-dessus est le proxy de User.has_module_perms. Si l'utilisateur dispose d'une autorisation dans foo, elle est True

{{ perms.foo.can_vote }}

La requête d'attribut à deux niveaux ci-dessus est le proxy de User.has_perm, Vrai si l'utilisateur dispose de l'autorisation foo.can_vote.

Par exemple :

{% if perms.foo %}

Vous êtes autorisé à faire quelque chose dans l'application foo.


{ % if perms.foo.can_vote %}
            


                                                                                           p>Vous pouvez conduire !


{% endif %}
{% else %}

Vous n'êtes pas autorisé à faire quoi que ce soit dans l'application foo.< /p>
{% endif %}


ou :

{% if 'foo' en perms %}

{% if 'foo.can_vote' en perms %}

                                                                                                                                                                                                     Pour plus de contenu connexe, veuillez consulter le site Web PHP en chinois (www .php.cn) !



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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment vérifier la version de Django Comment vérifier la version de Django Dec 01, 2023 pm 02:25 PM

Étapes pour vérifier la version de Django : 1. Ouvrez un terminal ou une fenêtre d'invite de commande ; 2. Assurez-vous que Django n'est pas installé, vous pouvez utiliser l'outil de gestion de packages pour l'installer et entrer la commande pip install django 3 ; . Une fois l'installation terminée, vous pouvez utiliser python -m django --version pour vérifier la version de Django.

Django vs Flask : une analyse comparative des frameworks Web Python Django vs Flask : une analyse comparative des frameworks Web Python Jan 19, 2024 am 08:36 AM

Django et Flask sont tous deux leaders dans les frameworks Web Python, et ils ont tous deux leurs propres avantages et scénarios applicables. Cet article procédera à une analyse comparative de ces deux frameworks et fournira des exemples de code spécifiques. Introduction au développement Django est un framework Web complet, son objectif principal est de développer rapidement des applications Web complexes. Django fournit de nombreuses fonctions intégrées, telles que ORM (Object Relational Mapping), formulaires, authentification, backend de gestion, etc. Ces fonctionnalités permettent à Django de gérer de grandes

Avantages et inconvénients du framework Django : tout ce que vous devez savoir Avantages et inconvénients du framework Django : tout ce que vous devez savoir Jan 19, 2024 am 09:09 AM

Django est un framework de développement complet qui couvre tous les aspects du cycle de vie du développement Web. Actuellement, ce framework est l’un des frameworks Web les plus populaires au monde. Si vous envisagez d'utiliser Django pour créer vos propres applications Web, vous devez alors comprendre les avantages et les inconvénients du framework Django. Voici tout ce que vous devez savoir, y compris des exemples de code spécifiques. Avantages de Django : 1. Développement rapide : Djang peut développer rapidement des applications Web. Il fournit une bibliothèque riche et interne

Comment vérifier la version de Django Comment vérifier la version de Django Nov 30, 2023 pm 03:08 PM

Comment vérifier la version de Django : 1. Pour vérifier via la ligne de commande, entrez la commande "python -m django --version" dans la fenêtre du terminal ou de la ligne de commande. 2. Pour vérifier dans l'environnement interactif Python, entrez "import django ; print(django. get_version())" code ; 3. Vérifiez le fichier de paramètres du projet Django et recherchez une liste nommée INSTALLED_APPS, qui contient des informations sur les applications installées.

Quelle est la différence entre les versions de Django ? Quelle est la différence entre les versions de Django ? Nov 20, 2023 pm 04:33 PM

Les différences sont : 1. Série Django 1.x : Il s'agit d'une première version de Django, comprenant les versions 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 et 1.9. Ces versions fournissent principalement des fonctions de développement Web de base ; 2. Série Django 2.x : Il s'agit de la version intermédiaire de Django, comprenant les versions 2.0, 2.1, 2.2 et autres. 3. Série Django 3.x : Il s'agit de la dernière version ; série de Django, y compris les versions 3.0, 3, etc.

Comment mettre à niveau la version de Django : étapes et considérations Comment mettre à niveau la version de Django : étapes et considérations Jan 19, 2024 am 10:16 AM

Comment mettre à niveau la version de Django : étapes et considérations, exemples de code spécifiques requis Introduction : Django est un puissant framework Web Python qui est continuellement mis à jour et mis à niveau pour offrir de meilleures performances et plus de fonctionnalités. Cependant, pour les développeurs utilisant des versions plus anciennes de Django, la mise à niveau de Django peut rencontrer certains défis. Cet article présentera les étapes et les précautions à suivre pour mettre à niveau la version de Django et fournira des exemples de code spécifiques. 1. Sauvegardez les fichiers du projet avant de mettre à niveau Djan

Django est-il front-end ou back-end ? Django est-il front-end ou back-end ? Nov 21, 2023 pm 02:36 PM

Django est le back-end. Détails : Bien que Django soit avant tout un framework backend, il est étroitement lié au développement front-end. Grâce à des fonctionnalités telles que le moteur de modèles de Django, la gestion de fichiers statiques et l'API RESTful, les développeurs front-end peuvent collaborer avec les développeurs back-end pour créer des applications Web puissantes et évolutives.

Django, Flask et FastAPI : quel framework convient aux débutants ? Django, Flask et FastAPI : quel framework convient aux débutants ? Sep 27, 2023 pm 09:06 PM

Django, Flask et FastAPI : quel framework convient aux débutants ? Introduction : Dans le domaine du développement d'applications Web, il existe de nombreux excellents frameworks Python parmi lesquels choisir. Cet article se concentrera sur les trois frameworks les plus populaires, Django, Flask et FastAPI. Nous évaluerons leurs fonctionnalités et discuterons du framework le mieux adapté aux débutants. Parallèlement, nous fournirons également quelques exemples de code spécifiques pour aider les débutants à mieux comprendre ces frameworks. 1. Django : Django

See all articles