Source code for shoop.admin.utils.permissions

# -*- coding: utf-8 -*-
# This file is part of Shoop.
#
# Copyright (c) 2012-2016, Shoop Ltd. All rights reserved.
#
# This source code is licensed under the AGPLv3 license found in the
# LICENSE file in the root directory of this source tree.
from django.contrib.auth.models import Permission


[docs]def get_default_model_permissions(model): """ Return a set of all default permissions for a given model. :param model: Model class :type model: django.db.Model :return: Set of default model permissions as strings :rtype: set[str] """ permissions = set() for default in model._meta.default_permissions: permissions.add("%s.%s_%s" % (model._meta.app_label, default, model._meta.model_name)) return permissions
[docs]def get_missing_permissions(user, permissions): """ Return a set of missing permissions for a given iterable of permission strings. :param user: User instance to check for permissions :type user: django.contrib.auth.models.User :param permissions: Iterable of permission strings :type permissions: Iterable[str] :return: Set of missing permission strings :rtype: set[str] """ if callable(getattr(user, 'has_perm', None)): missing_permissions = set(p for p in set(permissions) if not user.has_perm(p)) else: missing_permissions = set(permissions) return missing_permissions
[docs]def get_permissions_from_urls(urls): """ Return a set of permissions for a given iterable of urls. :param urls: Iterable of url objects to check for permissions :type urls: Iterable[django.core.urlresolvers.RegexURLPattern] :return: Set of permissions for urls as strings :rtype: set[str] """ permissions = set() for url in urls: if hasattr(url, "permissions") and url.permissions: permissions.update(url.permissions) return permissions
[docs]def get_permission_object_from_string(permission_string): """ Given a permission string of the form `app_label.permission_string`, get actual permission object. :param permission_string: Permission string :type permission_strings: str :return: Permission object :rtype: django.contrib.auth.models.Permission """ app_label, codename = permission_string.split(".") return Permission.objects.get(content_type__app_label=app_label, codename=codename)