From 2ce38a6fc020313bd2b20ab97d67e1e1e21392fa Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Sun, 9 Aug 2015 18:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86AdminRequired?= =?UTF-8?q?=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/middleware.py | 2 +- admin/tests.py | 68 +++++++++++++++++++++++++++++++++++++++++++++ oj/settings.py | 2 +- 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/admin/middleware.py b/admin/middleware.py index 515a8893..ccb689bc 100644 --- a/admin/middleware.py +++ b/admin/middleware.py @@ -8,7 +8,7 @@ class AdminRequiredMiddleware(object): def process_request(self, request): path = request.path_info if path.startswith("/admin/") or path.startswith("/api/admin/"): - if not request.user.is_authenticated(): + if not(request.user.is_authenticated() and request.user.admin_type): if request.is_ajax(): return HttpResponse(json.dumps({"code": 1, "data": u"请先登录"}), content_type="application/json") diff --git a/admin/tests.py b/admin/tests.py index e69de29b..8c88c3bc 100644 --- a/admin/tests.py +++ b/admin/tests.py @@ -0,0 +1,68 @@ +# coding=utf-8 +import json +from django.test import TestCase, Client +from django.core.urlresolvers import reverse +from django.http import HttpResponse + +from account.models import User + + +def middleware_test_func(request): + return HttpResponse(json.dumps({"code": 0})) + + +class AdminRequiredMidlewareTest(TestCase): + urls = "admin.test_urls" + + def setUp(self): + admin_user = User.objects.create(username="test", admin_type=0) + admin_user.set_password("test") + admin_user.save() + + admin_user = User.objects.create(username="test1", admin_type=1) + admin_user.set_password("test") + admin_user.save() + super_admin_user = User.objects.create(username="test2", admin_type=2) + super_admin_user.set_password("test") + super_admin_user.save() + + self.client = Client() + + def test_need_admin_login(self): + url = "/admin/" + response = self.client.get(url) + self.assertRedirects(response, "/login/") + + self.client.login(username="test", password="test") + response = self.client.get(url) + self.assertRedirects(response, "/login/") + self.client.logout() + + self.client.login(username="test1", password="test") + response = self.client.get(url) + self.assertTemplateUsed(response, "admin/admin.html") + self.client.logout() + + self.client.login(username="test2", password="test") + response = self.client.get(url) + self.assertTemplateUsed(response, "admin/admin.html") + + def test_need_admin_login_ajax(self): + url = "/api/admin/test/" + response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(json.loads(response.content), {"code": 1, "data": u"请先登录"}) + + self.client.login(username="test", password="test") + rresponse = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(json.loads(response.content), {"code": 1, "data": u"请先登录"}) + self.client.logout() + + self.client.login(username="test1", password="test") + response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(json.loads(response.content)["code"], 0) + self.client.logout() + + self.client.login(username="test2", password="test") + response = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') + self.assertEqual(json.loads(response.content)["code"], 0) + diff --git a/oj/settings.py b/oj/settings.py index c8a07ec2..469dfe4e 100644 --- a/oj/settings.py +++ b/oj/settings.py @@ -39,7 +39,6 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = ( - 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -50,6 +49,7 @@ INSTALLED_APPS = ( 'announcement', 'utils', 'group', + 'admin', 'rest_framework', 'rest_framework_swagger',