Dans la console d'administration, je peux ajouter un groupe et ajouter un tas d'autorisations liées à mes modèles, par exemple.
api | project | Can add project
api | project | Can change project
api | project | Can delete project
Comment puis-je faire cela par programme. Je ne trouve aucune information sur la façon de procéder.
J'ai:
from Django.contrib.auth.models import Group, Permission
from Django.contrib.contenttypes.models import ContentType
from api.models import Project
new_group, created = Group.objects.get_or_create(name='new_group')
# Code to add permission to group ???
ct = ContentType.objects.get_for_model(Project)
# Now what - Say I want to add 'Can add project' permission to new_group?
MISE À JOUR: Merci pour la réponse que vous avez fournie. J'ai pu l'utiliser pour déterminer ce dont j'avais besoin. Dans mon cas, je peux faire ce qui suit:
new_group, created = Group.objects.get_or_create(name='new_group')
proj_add_perm = Permission.objects.get(name='Can add project')
new_group.permissions.add(proj_add_perm)
Utilisez le code ci-dessous
from Django.contrib.auth.models import Group, Permission
from Django.contrib.contenttypes.models import ContentType
from api.models import Project
new_group, created = Group.objects.get_or_create(name='new_group')
# Code to add permission to group ???
ct = ContentType.objects.get_for_model(Project)
# Now what - Say I want to add 'Can add project' permission to new_group?
permission = Permission.objects.create(codename='can_add_project',
name='Can add project',
content_type=ct)
new_group.permissions.add(permission)
J'avais besoin de créer un ensemble de groupes par défaut et une autorisation (affichage uniquement) pour ces groupes. J'ai trouvé une commande manage.py qui peut être utile à d'autres (create_groups.py). Vous pouvez l'ajouter à votre <app>/management/commands
dir, puis exécutez via manage.py create_groups
:
"""
Create permission groups
Create permissions (read only) to models for a set of groups
"""
import logging
from Django.core.management.base import BaseCommand
from Django.contrib.auth.models import Group
from Django.contrib.auth.models import Permission
GROUPS = ['developers', 'devops', 'qa', 'operators', 'product']
MODELS = ['video', 'article', 'license', 'list', 'page', 'client']
PERMISSIONS = ['view', ] # For now only view permission by default for all, others include add, delete, change
class Command(BaseCommand):
help = 'Creates read only default permission groups for users'
def handle(self, *args, **options):
for group in GROUPS:
new_group, created = Group.objects.get_or_create(name=group)
for model in MODELS:
for permission in PERMISSIONS:
name = 'Can {} {}'.format(permission, model)
print("Creating {}".format(name))
try:
model_add_perm = Permission.objects.get(name=name)
except Permission.DoesNotExist:
logging.warning("Permission not found with name '{}'.".format(name))
continue
new_group.permissions.add(model_add_perm)
print("Created default group and permissions.")