添加提升小组管理员的api,调整小组管理权限的认证方式
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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"),
|
||||||
|
|||||||
Reference in New Issue
Block a user