Craig Otis
Craig Otis

Reputation: 32084

When to programmatically create custom Django permissions?

The permission/authentication documentation for Django 1.4 provides the following snippet for creating custom permissions programmatically:

Edit: (I would like to employ this for permissions that are not necessarily linked to a specific model class, but more general permissions that span multiple types.)

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get(app_label='myapp', model='BlogPost')
permission = Permission.objects.create(codename='can_publish',
                                       name='Can Publish Posts',
                                       content_type=content_type)

Source

My question is where this code should be placed. Obviously these should only be created once, but I don't want to have to do it in the shell. It seems like this should be stored in a file somewhere. (For documentation sake.)

Upvotes: 7

Views: 2860

Answers (1)

Arseny
Arseny

Reputation: 5179

Usually it is enough to just add the needed permissions to the corresponding model class using the permissions meta attribute.

This is from the official documentation:

class Task(models.Model):
    ...
    class Meta:
        permissions = (
            ("view_task", "Can see available tasks"),
            ("change_task_status", "Can change the status of tasks"),
            ("close_task", "Can remove a task by setting its status as closed"),
        )

Upvotes: 2

Related Questions