Merge tag '0.10.2'
[ganeti_webmgr.git] / ganeti_web / context_processors.py
blob819dd3adc456b580ae00e8bbd2174935d75d8b1b
1 # Copyright (C) 2010 Oregon State University et al.
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
16 # USA.
18 from django.conf import settings
19 from ganeti_web.models import Cluster
22 def site(request):
23 """
24 Add common site information to the context.
25 """
27 return {
28 'SITE_DOMAIN': settings.SITE_DOMAIN,
29 'SITE_NAME': settings.SITE_NAME,
33 ANONYMOUS_PERMISSIONS = dict(cluster_admin=False,
34 create_vm=False,
35 view_cluster=False)
37 CLUSTER_ADMIN_PERMISSIONS = dict(cluster_admin=True,
38 create_vm=True,
39 view_cluster=True)
41 CLUSTER_VIEW_PERMS = ['migrate', 'export', 'replace_disks', 'tags']
44 def common_permissions(request):
45 """
46 Add common cluster permission information to the context.
48 Information added by this processor:
50 * "cluster_admin" indicates whether the current user is an
51 administrator of any clusters.
52 * "create_vm" indicates whether the current user is allowed to create
53 VMs on any cluster.
54 * "view_cluster" indicates whether the current user has any other
55 permissions that would allow them to view clusters.
56 """
58 user = getattr(request, "user", None)
60 if user and user.is_authenticated():
61 if user.is_superuser:
62 return CLUSTER_ADMIN_PERMISSIONS
64 perms = user.get_perms_any(Cluster)
66 if 'admin' in perms:
67 return CLUSTER_ADMIN_PERMISSIONS
69 else:
70 create_vm = 'create_vm' in perms
71 view_cluster = any(p in perms for p in CLUSTER_VIEW_PERMS)
73 return {
74 'cluster_admin': False,
75 'create_vm': create_vm,
76 'view_cluster': view_cluster,
79 return ANONYMOUS_PERMISSIONS