Skip to content

Commit 1876927

Browse files
committed
Create new script ietf/bin/set_admin_permissions to configure Django Admin group permissions. Fixes ietf-tools#2008. Commit ready for merge.
- Legacy-Id: 13575
1 parent e9b7c57 commit 1876927

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

ietf/bin/set_admin_permissions

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# -*- Python -*-
4+
#
5+
'''
6+
This script configures Django Admin permissions
7+
'''
8+
9+
# Set PYTHONPATH and load environment variables for standalone script -----------------
10+
import os, sys
11+
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
12+
sys.path = [ basedir ] + sys.path
13+
os.environ["DJANGO_SETTINGS_MODULE"] = "ietf.settings"
14+
15+
virtualenv_activation = os.path.join(basedir, "env", "bin", "activate_this.py")
16+
if os.path.exists(virtualenv_activation):
17+
execfile(virtualenv_activation, dict(__file__=virtualenv_activation))
18+
19+
import django
20+
django.setup()
21+
# -------------------------------------------------------------------------------------
22+
23+
from django.contrib.auth.models import Group as AuthGroup
24+
from django.contrib.auth.models import Permission
25+
from ietf.group.models import Group
26+
27+
28+
def permission_names_to_objects(names):
29+
"""
30+
Given an iterable of permission names (e.g. 'app_label.add_model'),
31+
return an iterable of Permission objects for them. The permission
32+
must already exist, because a permission name is not enough information
33+
to create a new permission.
34+
"""
35+
result = []
36+
for name in names:
37+
app_label, codename = name.split(".", 1)
38+
try:
39+
result.append(Permission.objects.get(content_type__app_label=app_label,
40+
codename=codename))
41+
except Permission.DoesNotExist:
42+
print "NO SUCH PERMISSION: %s, %s" % (app_label, codename)
43+
raise
44+
45+
return result
46+
47+
48+
def main():
49+
secretariat = Group.objects.get(acronym='secretariat')
50+
users = [ r.person.user for r in secretariat.role_set.filter(name='secr') ]
51+
52+
# Set Auth Group members
53+
auth_group, _ = AuthGroup.objects.get_or_create(name='secretariat')
54+
auth_group.user_set.set(users)
55+
56+
# Set Auth Group Admin Permissions
57+
names = ['auth.add_user','auth.change_user','auth.delete_user',
58+
'group.add_group','group.change_group','group.delete_group',
59+
'group.add_role','group.change_role','group.delete_role',
60+
'group.add_groupevent','group.change_groupevent','group.delete_groupevent',
61+
'iesg.add_telechatagendaitem','iesg.change_telechatagendaitem','iesg.delete_telechatagendaitem',
62+
'iesg.add_telechatdate','iesg.change_telechatdate','iesg.delete_telechatdate',
63+
'mailinglists.add_list','mailinglists.change_list','mailinglists.delete_list',
64+
'meeting.add_floorplan','meeting.change_floorplan','meeting.delete_floorplan',
65+
'meeting.add_room','meeting.change_room','meeting.delete_room',
66+
'meeting.add_urlresource','meeting.change_urlresource','meeting.delete_urlresource',
67+
'person.add_person','person.change_person','person.delete_person',
68+
'person.add_alias','person.change_alias','person.delete_alias',
69+
'person.add_email','person.change_email','person.delete_email',
70+
'submit.add_submission','submit.change_submission','submit.delete_submission',
71+
]
72+
73+
permissions = permission_names_to_objects(names)
74+
auth_group.permissions.set(permissions)
75+
76+
77+
if __name__ == '__main__':
78+
main()

0 commit comments

Comments
 (0)