Permission 'jabber_broadcast_all' to restrict groups

- without, can only broadcast to own groups
 - with, can broadcast to all and every group
Updated form to check request user for permission and groups when generating form
For #159
This commit is contained in:
Adarnof 2016-01-05 23:36:17 +00:00
parent 2c6ca5f273
commit b31dcb7ac0
3 changed files with 16 additions and 7 deletions

View File

@ -1,13 +1,20 @@
from django import forms from django import forms
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from util import check_if_user_has_permission
class JabberBroadcastForm(forms.Form): class JabberBroadcastForm(forms.Form):
def __init__(self, user, *args, **kwargs):
super(JabberBroadcastForm, self).__init__(*args, **kwargs)
allchoices = [] allchoices = []
if check_if_user_has_permission(user, 'jabber_broadcast_all'):
allchoices.append(('all', 'all')) allchoices.append(('all', 'all'))
for group in Group.objects.all(): for g in Group.objects.all():
allchoices.append((str(group.name), str(group.name))) allchoices.append((str(g.name), str(g.name)))
group = forms.ChoiceField(choices=allchoices, widget=forms.Select) else:
for g in user.groups.all():
allchoices.append((str(g.name), str(g.name)))
self.fields['group'] = forms.ChoiceField(choices=allchoices, widget=forms.Select)
message = forms.CharField(widget=forms.Textarea) message = forms.CharField(widget=forms.Textarea)

View File

@ -4,6 +4,7 @@ from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import user_passes_test
from django.contrib.auth.models import Group
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
@ -90,8 +91,8 @@ def jabber_broadcast_view(request):
success = True success = True
logger.info("Sent jabber broadcast on behalf of user %s" % request.user) logger.info("Sent jabber broadcast on behalf of user %s" % request.user)
else: else:
form = JabberBroadcastForm() form = JabberBroadcastForm(request.user)
logger.debug("Returning blank form to user %s" % request.user) logger.debug("Generated broadcast form for user %s containing %s groups" % (request.user, len(form.fields['group'].choices)))
context = {'form': form, 'success': success} context = {'form': form, 'success': success}
return render_to_response('registered/jabberbroadcast.html', context, context_instance=RequestContext(request)) return render_to_response('registered/jabberbroadcast.html', context, context_instance=RequestContext(request))

View File

@ -15,6 +15,7 @@ def bootstrap_permissions():
Permission.objects.get_or_create(codename="member", content_type=ct, name="member") Permission.objects.get_or_create(codename="member", content_type=ct, name="member")
Permission.objects.get_or_create(codename="group_management", content_type=ct, name="group_management") Permission.objects.get_or_create(codename="group_management", content_type=ct, name="group_management")
Permission.objects.get_or_create(codename="jabber_broadcast", content_type=ct, name="jabber_broadcast") Permission.objects.get_or_create(codename="jabber_broadcast", content_type=ct, name="jabber_broadcast")
Permission.objects.get_or_create(codename="jabber_broadcast_all", content_type=ct, name="jabber_broadcast_all")
Permission.objects.get_or_create(codename="human_resources", content_type=ct, name="human_resources") Permission.objects.get_or_create(codename="human_resources", content_type=ct, name="human_resources")
Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member") Permission.objects.get_or_create(codename="blue_member", content_type=ct, name="blue_member")
Permission.objects.get_or_create(codename="corp_stats", content_type=ct, name="corp_stats") Permission.objects.get_or_create(codename="corp_stats", content_type=ct, name="corp_stats")