acl.py 1.92 KB
Newer Older
Gabriel Detraz's avatar
Gabriel Detraz committed
1
# -*- mode: python; coding: utf-8 -*-
nanoy's avatar
nanoy committed
2
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il
3
4
5
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
moamoak's avatar
moamoak committed
6
# Copyright © 2018 Maël Kervella
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

moamoak's avatar
moamoak committed
22
"""Defines the ACL for the whole API.
23

moamoak's avatar
moamoak committed
24
25
Importing this module, creates the 'can view api' permission if not already
done.
26
27
28
"""

from django.conf import settings
29
from django.contrib.auth.models import Permission
Alexandre IOOSS's avatar
Alexandre IOOSS committed
30
from django.contrib.contenttypes.models import ContentType
Laouen Fernet's avatar
Laouen Fernet committed
31
from django.utils.translation import ugettext as _
moamoak's avatar
moamoak committed
32
33


klafyvel's avatar
klafyvel committed
34
def can_view(user, *args, **kwargs):
35
36
37
38
39
40
41
42
43
44
    """Check if an user can view the application.

    Args:
        user: The user who wants to view the application.

    Returns:
        A couple (allowed, msg) where allowed is a boolean which is True if
        viewing is granted and msg is a message (can be None).
    """
    kwargs = {
klafyvel's avatar
klafyvel committed
45
46
        "app_label": settings.API_CONTENT_TYPE_APP_LABEL,
        "codename": settings.API_PERMISSION_CODENAME,
47
    }
klafyvel's avatar
klafyvel committed
48
    permission = "%(app_label)s.%(codename)s" % kwargs
klafyvel's avatar
klafyvel committed
49
    can = user.has_perm(permission)
klafyvel's avatar
klafyvel committed
50
51
    return (
        can,
52
        None if can else _("You don't have the right to view this application."),
klafyvel's avatar
klafyvel committed
53
54
        (permission,),
    )