Source code for permission.utils.permissions

# coding=utf-8
"""
Permission utility module.

In this module, term *perm* indicate the identifier string permission written
in 'app_label.codename' format.
"""
from __future__ import unicode_literals


[docs]def get_perm_codename(perm, fail_silently=True): """ Get permission codename from permission-string. Examples -------- >>> get_perm_codename('app_label.codename_model') 'codename_model' >>> get_perm_codename('app_label.codename') 'codename' >>> get_perm_codename('codename_model') 'codename_model' >>> get_perm_codename('codename') 'codename' >>> get_perm_codename('app_label.app_label.codename_model') 'app_label.codename_model' """ try: perm = perm.split(".", 1)[1] except IndexError as e: if not fail_silently: raise e return perm
[docs]def permission_to_perm(permission): """ Convert a permission instance to a permission-string. Examples -------- >>> permission = Permission.objects.get( ... content_type__app_label='auth', ... codename='add_user', ... ) >>> permission_to_perm(permission) 'auth.add_user' """ app_label = permission.content_type.app_label codename = permission.codename return "%s.%s" % (app_label, codename)
[docs]def perm_to_permission(perm): """ Convert a permission-string to a permission instance. Examples -------- >>> permission = perm_to_permission('auth.add_user') >>> permission.content_type.app_label 'auth' >>> permission.codename 'add_user' """ from django.contrib.auth.models import Permission try: app_label, codename = perm.split(".", 1) except (ValueError, IndexError): raise AttributeError( "The format of identifier string permission (perm) is wrong. " "It should be in 'app_label.codename'." ) else: permission = Permission.objects.get( content_type__app_label=app_label, codename=codename ) return permission
[docs]def get_app_perms(model_or_app_label): """ Get permission-string list of the specified django application. Parameters ---------- model_or_app_label : model class or string A model class or app_label string to specify the particular django application. Returns ------- set A set of perms of the specified django application. Examples -------- >>> perms1 = get_app_perms('auth') >>> perms2 = get_app_perms(Permission) >>> perms1 == perms2 True """ from django.contrib.auth.models import Permission if isinstance(model_or_app_label, str): app_label = model_or_app_label else: # assume model_or_app_label is model class app_label = model_or_app_label._meta.app_label qs = Permission.objects.filter(content_type__app_label=app_label) perms = ("%s.%s" % (app_label, p.codename) for p in qs.iterator()) return set(perms)
[docs]def get_model_perms(model): """ Get permission-string list of a specified django model. Parameters ---------- model : model class A model class to specify the particular django model. Returns ------- set A set of perms of the specified django model. Examples -------- >>> sorted(get_model_perms(Permission)) == [ ... 'auth.add_permission', ... 'auth.change_permission', ... 'auth.delete_permission' ... ] True """ from django.contrib.auth.models import Permission app_label = model._meta.app_label model_name = model._meta.object_name.lower() qs = Permission.objects.filter( content_type__app_label=app_label, content_type__model=model_name ) perms = ("%s.%s" % (app_label, p.codename) for p in qs.iterator()) return set(perms)