添加提升小组管理员的api,调整小组管理权限的认证方式

This commit is contained in:
sxw
2015-12-09 19:51:59 +08:00
parent c12ee66c51
commit f924843ef1
2 changed files with 43 additions and 7 deletions

View File

@@ -5,14 +5,14 @@ from django.db import IntegrityError
from rest_framework.views import APIView from rest_framework.views import APIView
from utils.shortcuts import error_response, serializer_invalid_response, success_response, paginate, error_page from utils.shortcuts import error_response, serializer_invalid_response, success_response, paginate, error_page
from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN from account.models import REGULAR_USER, ADMIN, SUPER_ADMIN, User
from account.decorators import login_required from account.decorators import login_required
from .models import Group, JoinGroupRequest, UserGroupRelation from .models import Group, JoinGroupRequest, UserGroupRelation, AdminGroupRelation
from .serializers import (CreateGroupSerializer, EditGroupSerializer, from .serializers import (CreateGroupSerializer, EditGroupSerializer,
CreateJoinGroupRequestSerializer, GroupSerializer, CreateJoinGroupRequestSerializer, GroupSerializer,
GroupMemberSerializer, EditGroupMemberSerializer, GroupMemberSerializer, EditGroupMemberSerializer,
JoinGroupRequestSerializer, PutJoinGroupRequestSerializer) JoinGroupRequestSerializer, PutJoinGroupRequestSerializer, GroupPromoteAdminSerializer)
from announcement.models import Announcement from announcement.models import Announcement
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.db.models import Q from django.db.models import Q
@@ -57,9 +57,10 @@ class GroupAdminAPIView(APIView, GroupAPIViewBase):
group = Group.objects.create(name=data["name"], group = Group.objects.create(name=data["name"],
description=data["description"], description=data["description"],
join_group_setting=data["join_group_setting"], join_group_setting=data["join_group_setting"],
admin=request.user) created_by=request.user)
except IntegrityError: except IntegrityError:
return error_response(u"小组名已经存在") return error_response(u"小组名已经存在")
AdminGroupRelation.objects.create(group=group, user=request.user)
return success_response(GroupSerializer(group).data) return success_response(GroupSerializer(group).data)
else: else:
return serializer_invalid_response(serializer) return serializer_invalid_response(serializer)
@@ -132,8 +133,13 @@ class GroupMemberAdminAPIView(APIView, GroupAPIViewBase):
group = self.get_group(request, group_id) group = self.get_group(request, group_id)
except Group.DoesNotExist: except Group.DoesNotExist:
return error_response(u"小组不存在") return error_response(u"小组不存在")
adminOnly = request.GET.get("adminOnly", None)
if adminOnly:
members = AdminGroupRelation.objects.filter(group=group)
else:
members = UserGroupRelation.objects.filter(group=group)
return paginate(request, UserGroupRelation.objects.filter(group=group), GroupMemberSerializer) return paginate(request, members, GroupMemberSerializer)
def put(self, request): def put(self, request):
""" """
@@ -314,3 +320,30 @@ def application_page(request, request_id):
return error_page(request, u"申请不存在") return error_page(request, u"申请不存在")
return render(request, "oj/group/my_application.html", return render(request, "oj/group/my_application.html",
{"application": application}) {"application": application})
class GroupPrometAdminAPIView(APIView):
def post(self, request):
"""
创建小组管理员的api
---
request_serializer: GroupPromoteAdminSerializer
"""
serializer = GroupPromoteAdminSerializer(data=request.data)
if serializer.is_valid():
data = serializer.data
try:
group = Group.objects.get(id=data["group_id"])
except Group.DoesNotExist:
return error_response(u"小组不存在")
try:
user = User.objects.get(id=data["user_id"])
except User.DoesNotExist:
return error_response(u"用户不存在")
try:
AdminGroupRelation.objects.create(user=user, group=group)
except IntegrityError:
return error_response(u"该用户已经是管理员了")
return success_response(u"操作成功")
else:
return serializer_invalid_response(serializer)

View File

@@ -15,7 +15,7 @@ from contest.views import (ContestAdminAPIView, ContestProblemAdminAPIView,
MakeContestProblemPublicAPIView) MakeContestProblemPublicAPIView)
from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView, from group.views import (GroupAdminAPIView, GroupMemberAdminAPIView,
JoinGroupAPIView, JoinGroupRequestAdminAPIView) JoinGroupAPIView, JoinGroupRequestAdminAPIView, GroupPrometAdminAPIView)
from admin.views import AdminTemplateView from admin.views import AdminTemplateView
@@ -56,12 +56,15 @@ urlpatterns = [
url(r'^api/submission/$', SubmissionAPIView.as_view(), name="submission_api"), url(r'^api/submission/$', SubmissionAPIView.as_view(), name="submission_api"),
url(r'^api/group_join/$', JoinGroupAPIView.as_view(), name="group_join_api"), url(r'^api/group_join/$', JoinGroupAPIView.as_view(), name="group_join_api"),
url(r'^api/admin/upload_image/$', SimditorImageUploadAPIView.as_view(), name="simditor_upload_image"), url(r'^api/admin/upload_image/$', SimditorImageUploadAPIView.as_view(), name="simditor_upload_image"),
url(r'^api/admin/announcement/$', AnnouncementAdminAPIView.as_view(), name="announcement_admin_api"), url(r'^api/admin/announcement/$', AnnouncementAdminAPIView.as_view(), name="announcement_admin_api"),
url(r'^api/admin/contest/$', ContestAdminAPIView.as_view(), name="contest_admin_api"), url(r'^api/admin/contest/$', ContestAdminAPIView.as_view(), name="contest_admin_api"),
url(r'^api/admin/user/$', UserAdminAPIView.as_view(), name="user_admin_api"), url(r'^api/admin/user/$', UserAdminAPIView.as_view(), name="user_admin_api"),
url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"), url(r'^api/admin/group/$', GroupAdminAPIView.as_view(), name="group_admin_api"),
url(r'^api/admin/group_member/$', GroupMemberAdminAPIView.as_view(), name="group_member_admin_api"), url(r'^api/admin/group_member/$', GroupMemberAdminAPIView.as_view(), name="group_member_admin_api"),
url(r'^api/admin/group/promot_as_admin/$', GroupPrometAdminAPIView.as_view(), name="group_promote_admin_api"),
url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"), url(r'^api/admin/problem/$', ProblemAdminAPIView.as_view(), name="problem_admin_api"),
url(r'^api/admin/contest_problem/$', ContestProblemAdminAPIView.as_view(), name="contest_problem_admin_api"), url(r'^api/admin/contest_problem/$', ContestProblemAdminAPIView.as_view(), name="contest_problem_admin_api"),