web-dev-qa-db-ja.com

プログラムでDjango=権限を持つグループを作成します

管理コンソールで、グループを追加し、モデルに関連する一連の権限を追加できます。

api | project | Can add project
api | project | Can change project
api | project | Can delete project

プログラムでこれを行うにはどうすればよいですか。これを行う方法についての情報を見つけることができません。

私が持っています:

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?

更新:ご回答いただきありがとうございます。私はそれを使用して、必要なものを解決することができました。私の場合、次のことができます。

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)
35
Steve Walsh

以下のコードを使用

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)
37
anuragal

デフォルトのグループと、それらのグループの権限(表示のみ)を作成する必要がありました。他の人に役立つかもしれないmanage.pyコマンド(create_groups.py)を思いつきました。 <app>/management/commands dirに追加して、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.")
16
radtek