Assign model permissions and Groups — check permissions in views and templates.
Permissions and Groups
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
# Model-level permissions (auto-created: add, change, delete, view)
user.has_perm("blog.add_post")
user.has_perm("blog.change_post")
# Custom permissions in model Meta
class Post(models.Model):
class Meta:
permissions = [
("publish_post", "Can publish posts"),
("feature_post", "Can feature posts"),
]
# Assign permission
permission = Permission.objects.get(codename="publish_post")
user.user_permissions.add(permission)
# Groups
from django.contrib.auth.models import Group
editors = Group.objects.create(name="Editors")
editors.permissions.add(permission)
user.groups.add(editors)
# Template
{% if perms.blog.publish_post %}
<button>Publish</button>
{% endif %}