mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2024-09-21 08:23:20 +00:00
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
# coding=utf-8
|
||
from functools import wraps
|
||
|
||
from django.http import HttpResponse, HttpResponseRedirect
|
||
from django.shortcuts import render
|
||
|
||
from utils.shortcuts import error_response, error_page
|
||
|
||
from account.models import SUPER_ADMIN
|
||
from .models import Announcement
|
||
|
||
|
||
def check_user_announcement_permission(func):
|
||
@wraps(func)
|
||
def _check_user_announcement_permission(*args, **kwargs):
|
||
"""
|
||
这个函数检测当前用户能否查看这个公告
|
||
"""
|
||
# CBV 的情况,第一个参数是self,第二个参数是request
|
||
if len(args) == 2:
|
||
request = args[-1]
|
||
else:
|
||
request = args[0]
|
||
|
||
if "announcement_id" not in kwargs:
|
||
return error_page(request, u"参数错误")
|
||
announcement_id = kwargs["announcement_id"]
|
||
|
||
try:
|
||
announcement = Announcement.objects.get(id=announcement_id, visible=True)
|
||
except Announcement.DoesNotExist:
|
||
return error_page(request, u"公告不存在")
|
||
|
||
# 如果公告是只有部分小组可见的
|
||
if not announcement.is_global:
|
||
# 用户必须是登录状态的
|
||
if not request.user.is_authenticated():
|
||
return HttpResponseRedirect("/login/")
|
||
if not announcement.groups.filter(id__in=request.user.group_set.all()).exists():
|
||
return error_page(request, u"公告不存在")
|
||
return func(*args, **kwargs)
|
||
|
||
return _check_user_announcement_permission
|