Introduce forum ACLs

This commit is contained in:
Trever Fischer
2012-04-18 10:51:20 -04:00
parent 3d47f691a0
commit 3149c2818b
3 changed files with 21 additions and 1 deletions

View File

@@ -3,3 +3,4 @@ from django.contrib import admin
admin.site.register(models.Forum)
admin.site.register(models.Topic)
admin.site.register(models.Post)
admin.site.register(models.ForumPostingRight)

View File

@@ -1,5 +1,5 @@
from django.db import models
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Group
from mptt.models import MPTTModel, TreeForeignKey
def unique_slug(item,slug_source,slug_field):
@@ -111,3 +111,7 @@ class Post(MPTTModel):
def __unicode__(self):
return self.body
class ForumPostingRight(models.Model):
forum = models.ForeignKey(Forum, related_name='acls')
group = models.ForeignKey(Group)

View File

@@ -1,6 +1,7 @@
import models
import forms
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib import messages
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.template import RequestContext
@@ -45,6 +46,20 @@ def reply(request, topicID=None):
@login_required
def newTopic(request, forumID=None):
parentForum = models.Forum.objects.get(id__exact=forumID)
permitted = False
postingRights = parentForum.acls.all()
if len(postingRights) == 0:
permitted = True
for group in request.user.groups.all():
if permitted:
break
for acl in postingRights:
if group == acl.group:
permitted = True
break
if not permitted:
messages.error(request, "You are not permitted to post in this forum.")
return HttpResponseRedirect(parentForum.get_absolute_url())
if request.method == 'POST':
replyForm = forms.ReplyForm(request.POST, prefix='reply')
topicForm = forms.TopicForm(request.POST, prefix='topic')