2015-09-16 00:55:27 +02:00
|
|
|
from django.contrib.auth.models import Permission
|
2015-02-18 15:58:12 +01:00
|
|
|
from django.db.models import Q
|
2013-03-12 20:58:22 +01:00
|
|
|
|
2015-09-16 00:55:27 +02:00
|
|
|
from .models import Group, User
|
2015-02-12 20:57:05 +01:00
|
|
|
|
2013-03-12 20:58:22 +01:00
|
|
|
|
2015-02-12 20:57:05 +01:00
|
|
|
def create_builtin_groups_and_admin(**kwargs):
|
2014-11-13 22:23:16 +01:00
|
|
|
"""
|
2015-02-12 20:57:05 +01:00
|
|
|
Creates the builtin groups: Anonymous, Registered, Delegates and Staff.
|
|
|
|
|
|
|
|
Creates the builtin user: admin.
|
2014-11-13 22:23:16 +01:00
|
|
|
"""
|
2015-02-12 20:57:05 +01:00
|
|
|
# Check whether the group pks 1 to 4 are free
|
|
|
|
if Group.objects.filter(pk__in=range(1, 5)).exists():
|
|
|
|
# Do completely nothing if there are already some of our groups in the database.
|
2014-10-11 14:34:49 +02:00
|
|
|
return
|
|
|
|
|
2015-02-18 15:58:12 +01:00
|
|
|
permission_strings = (
|
|
|
|
'agenda.can_be_speaker',
|
2015-03-26 05:36:10 +01:00
|
|
|
'agenda.can_manage',
|
|
|
|
'agenda.can_see',
|
2015-10-24 19:02:43 +02:00
|
|
|
'agenda.can_see_hidden_items',
|
2015-03-26 05:36:10 +01:00
|
|
|
'assignments.can_manage',
|
|
|
|
'assignments.can_nominate_other',
|
|
|
|
'assignments.can_nominate_self',
|
|
|
|
'assignments.can_see',
|
2015-06-29 12:08:15 +02:00
|
|
|
'core.can_manage_config',
|
2015-02-18 15:58:12 +01:00
|
|
|
'core.can_manage_projector',
|
|
|
|
'core.can_manage_tags',
|
2016-01-25 21:22:22 +01:00
|
|
|
'core.can_see_frontpage',
|
2015-02-18 15:58:12 +01:00
|
|
|
'core.can_see_projector',
|
|
|
|
'core.can_use_chat',
|
2015-03-26 05:36:10 +01:00
|
|
|
'mediafiles.can_manage',
|
|
|
|
'mediafiles.can_see',
|
|
|
|
'mediafiles.can_upload',
|
|
|
|
'motions.can_create',
|
|
|
|
'motions.can_manage',
|
|
|
|
'motions.can_see',
|
|
|
|
'motions.can_support',
|
2015-02-18 15:58:12 +01:00
|
|
|
'users.can_manage',
|
|
|
|
'users.can_see_extra_data',
|
|
|
|
'users.can_see_name', )
|
|
|
|
permission_query = Q()
|
2015-09-16 00:55:27 +02:00
|
|
|
permission_dict = {}
|
2015-02-18 15:58:12 +01:00
|
|
|
|
2015-09-16 00:55:27 +02:00
|
|
|
# Load all permissions
|
2015-02-18 15:58:12 +01:00
|
|
|
for permission_string in permission_strings:
|
|
|
|
app_label, codename = permission_string.split('.')
|
|
|
|
query_part = Q(content_type__app_label=app_label) & Q(codename=codename)
|
|
|
|
permission_query = permission_query | query_part
|
|
|
|
for permission in Permission.objects.select_related('content_type').filter(permission_query):
|
|
|
|
permission_string = '.'.join((permission.content_type.app_label, permission.codename))
|
|
|
|
permission_dict[permission_string] = permission
|
2015-02-12 20:57:05 +01:00
|
|
|
|
2015-02-18 15:58:12 +01:00
|
|
|
# Anonymous (pk 1) and Registered (pk 2)
|
|
|
|
base_permissions = (
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['agenda.can_see'],
|
2015-10-24 19:02:43 +02:00
|
|
|
permission_dict['agenda.can_see_hidden_items'],
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['assignments.can_see'],
|
2016-01-25 21:22:22 +01:00
|
|
|
permission_dict['core.can_see_frontpage'],
|
2015-02-18 15:58:12 +01:00
|
|
|
permission_dict['core.can_see_projector'],
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['mediafiles.can_see'],
|
|
|
|
permission_dict['motions.can_see'],
|
2015-02-18 15:58:12 +01:00
|
|
|
permission_dict['users.can_see_name'], )
|
2016-01-29 14:52:25 +01:00
|
|
|
group_anonymous = Group.objects.create(name='Guests', pk=1)
|
2015-02-18 15:58:12 +01:00
|
|
|
group_anonymous.permissions.add(*base_permissions)
|
2016-01-30 09:22:06 +01:00
|
|
|
group_registered = Group.objects.create(name='Registered users', pk=2)
|
2015-02-18 15:58:12 +01:00
|
|
|
group_registered.permissions.add(
|
|
|
|
permission_dict['agenda.can_be_speaker'],
|
|
|
|
*base_permissions)
|
2015-02-12 20:57:05 +01:00
|
|
|
|
|
|
|
# Delegates (pk 3)
|
2015-02-18 15:58:12 +01:00
|
|
|
delegates_permissions = (
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['assignments.can_nominate_other'],
|
|
|
|
permission_dict['assignments.can_nominate_self'],
|
|
|
|
permission_dict['mediafiles.can_upload'],
|
|
|
|
permission_dict['motions.can_create'],
|
|
|
|
permission_dict['motions.can_support'], )
|
2016-01-29 14:52:25 +01:00
|
|
|
group_delegates = Group.objects.create(name='Delegates', pk=3)
|
2015-02-18 15:58:12 +01:00
|
|
|
group_delegates.permissions.add(*delegates_permissions)
|
2015-02-12 20:57:05 +01:00
|
|
|
|
|
|
|
# Staff (pk 4)
|
2015-02-18 15:58:12 +01:00
|
|
|
staff_permissions = (
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['agenda.can_manage'],
|
|
|
|
permission_dict['assignments.can_manage'],
|
|
|
|
permission_dict['assignments.can_nominate_other'],
|
|
|
|
permission_dict['assignments.can_nominate_self'],
|
2015-06-29 12:08:15 +02:00
|
|
|
permission_dict['core.can_manage_config'],
|
2015-02-18 15:58:12 +01:00
|
|
|
permission_dict['core.can_manage_projector'],
|
|
|
|
permission_dict['core.can_manage_tags'],
|
|
|
|
permission_dict['core.can_use_chat'],
|
2015-03-26 05:36:10 +01:00
|
|
|
permission_dict['mediafiles.can_manage'],
|
|
|
|
permission_dict['mediafiles.can_upload'],
|
|
|
|
permission_dict['motions.can_create'],
|
|
|
|
permission_dict['motions.can_manage'],
|
2016-03-05 20:45:57 +01:00
|
|
|
permission_dict['users.can_manage'],
|
|
|
|
permission_dict['users.can_see_extra_data'],)
|
2016-01-29 14:52:25 +01:00
|
|
|
group_staff = Group.objects.create(name='Staff', pk=4)
|
2015-02-18 15:58:12 +01:00
|
|
|
group_staff.permissions.add(*staff_permissions)
|
|
|
|
|
2016-03-05 20:45:57 +01:00
|
|
|
# Add users.can_see_name permission to staff
|
2015-09-16 00:55:27 +02:00
|
|
|
# group to ensure proper management possibilities
|
2015-02-12 20:57:05 +01:00
|
|
|
# TODO: Remove this redundancy after cleanup of the permission system.
|
2015-02-18 15:58:12 +01:00
|
|
|
group_staff.permissions.add(
|
|
|
|
permission_dict['users.can_see_name'])
|
2015-02-12 20:57:05 +01:00
|
|
|
|
2015-09-16 00:55:27 +02:00
|
|
|
# Create or reset admin user
|
2015-02-12 20:57:05 +01:00
|
|
|
User.objects.create_or_reset_admin_user()
|