/
utils.py
42 lines (32 loc) · 1.1 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Use modern Python
from __future__ import unicode_literals, absolute_import, print_function
# Local Imports
from django_prbac.exceptions import PermissionDenied
from django_prbac.models import Role, UserRole
def has_privilege(request, slug, **assignment):
"""
Returns true if the request has the privilege specified by slug,
otherwise false
"""
if not hasattr(request, 'role'):
return False
privilege = Role.get_privilege(slug, assignment)
if privilege is None:
return False
if request.role.has_privilege(privilege):
return True
if not hasattr(request, 'user') or not hasattr(request.user, 'prbac_role'):
return False
try:
request.user.prbac_role
except UserRole.DoesNotExist:
return False
return request.user.prbac_role.has_privilege(privilege)
def ensure_request_has_privilege(request, slug, **assignment):
"""
DEPRECATED
You most likely want `has_permission` or one of the
`requires_privilege` decorators.
"""
if not has_privilege(request, slug, **assignment):
raise PermissionDenied()