@@ -11,8 +11,10 @@ from django.db import transaction |
||
| 11 | 11 |
from django.db.models import Count, Q, Sum |
| 12 | 12 |
from django_logit import logit |
| 13 | 13 |
from django_response import response |
| 14 |
+from django.contrib.auth.hashers import make_password |
|
| 14 | 15 |
from paginator import pagination |
| 15 | 16 |
from TimeConvert import TimeConvert as tc |
| 17 |
+from pysnippets.strsnippets import strip |
|
| 16 | 18 |
|
| 17 | 19 |
from account.models import UserInfo |
| 18 | 20 |
from api.encrypt_views import get_ciphertext |
@@ -1635,3 +1637,124 @@ def complement_code_contacted(request): |
||
| 1635 | 1637 |
log.save() |
| 1636 | 1638 |
|
| 1637 | 1639 |
return response() |
| 1640 |
+ |
|
| 1641 |
+ |
|
| 1642 |
+def administrator_list(request): |
|
| 1643 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 1644 |
+ admin_id = request.POST.get('admin_id', '')
|
|
| 1645 |
+ page = request.POST.get('page', 1)
|
|
| 1646 |
+ num = request.POST.get('num', 20)
|
|
| 1647 |
+ |
|
| 1648 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
| 1649 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
| 1650 |
+ |
|
| 1651 |
+ try: |
|
| 1652 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
| 1653 |
+ except AdministratorInfo.DoesNotExist: |
|
| 1654 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
| 1655 |
+ |
|
| 1656 |
+ if administrator.admin_type != AdministratorInfo.ADMINISTRATOR: |
|
| 1657 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED) |
|
| 1658 |
+ |
|
| 1659 |
+ logs = AdministratorInfo.objects.filter(status=True).order_by('-created_at')
|
|
| 1660 |
+ |
|
| 1661 |
+ count = logs.count() |
|
| 1662 |
+ logs, left = pagination(logs, page, num) |
|
| 1663 |
+ logs = [log.admindata for log in logs] |
|
| 1664 |
+ return response(200, 'Get Admin List Success', u'获取后台管理员成功', data={
|
|
| 1665 |
+ 'logs': logs, |
|
| 1666 |
+ 'left': left, |
|
| 1667 |
+ 'count': count |
|
| 1668 |
+ }) |
|
| 1669 |
+ |
|
| 1670 |
+ |
|
| 1671 |
+def administrator_create(request): |
|
| 1672 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 1673 |
+ admin_id = request.POST.get('admin_id', '')
|
|
| 1674 |
+ |
|
| 1675 |
+ admin_type = request.POST.get('admin_type', '')
|
|
| 1676 |
+ phone = request.POST.get('phone', '')
|
|
| 1677 |
+ name = request.POST.get('name', '')
|
|
| 1678 |
+ password = request.POST.get('password', '')
|
|
| 1679 |
+ brand_name = request.POST.get('brand_name', '')
|
|
| 1680 |
+ |
|
| 1681 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
| 1682 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
| 1683 |
+ |
|
| 1684 |
+ try: |
|
| 1685 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
| 1686 |
+ except AdministratorInfo.DoesNotExist: |
|
| 1687 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
| 1688 |
+ |
|
| 1689 |
+ if administrator.admin_type != AdministratorInfo.ADMINISTRATOR: |
|
| 1690 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED) |
|
| 1691 |
+ |
|
| 1692 |
+ encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER) |
|
| 1693 |
+ |
|
| 1694 |
+ AdministratorInfo.objects.create( |
|
| 1695 |
+ brand_id=brand_id, |
|
| 1696 |
+ brand_name=brand_name, |
|
| 1697 |
+ admin_type=admin_type, |
|
| 1698 |
+ phone=phone, |
|
| 1699 |
+ name=name, |
|
| 1700 |
+ password='', |
|
| 1701 |
+ encryption=encryption, |
|
| 1702 |
+ ) |
|
| 1703 |
+ |
|
| 1704 |
+ return response(200, 'Create Admin Success', u'创建后台管理员成功') |
|
| 1705 |
+ |
|
| 1706 |
+ |
|
| 1707 |
+def administrator_update(request): |
|
| 1708 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 1709 |
+ admin_id = request.POST.get('admin_id', '')
|
|
| 1710 |
+ |
|
| 1711 |
+ target_admin_id = request.POST.get('target_admin_id', '')
|
|
| 1712 |
+ admin_type = int(request.POST.get('admin_type', 3))
|
|
| 1713 |
+ phone = request.POST.get('phone', '')
|
|
| 1714 |
+ name = request.POST.get('name', '')
|
|
| 1715 |
+ password = request.POST.get('password', '')
|
|
| 1716 |
+ |
|
| 1717 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
| 1718 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
| 1719 |
+ |
|
| 1720 |
+ try: |
|
| 1721 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
| 1722 |
+ except AdministratorInfo.DoesNotExist: |
|
| 1723 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
| 1724 |
+ |
|
| 1725 |
+ if administrator.admin_type != AdministratorInfo.ADMINISTRATOR: |
|
| 1726 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED) |
|
| 1727 |
+ |
|
| 1728 |
+ encryption = make_password(strip(password), settings.MAKE_PASSWORD_SALT, settings.MAKE_PASSWORD_HASHER) |
|
| 1729 |
+ |
|
| 1730 |
+ AdministratorInfo.objects.filter(admin_id=target_admin_id, brand_id=brand_id).update( |
|
| 1731 |
+ admin_type=admin_type, |
|
| 1732 |
+ phone=phone, |
|
| 1733 |
+ name=name, |
|
| 1734 |
+ password='', |
|
| 1735 |
+ encryption=encryption, |
|
| 1736 |
+ ) |
|
| 1737 |
+ |
|
| 1738 |
+ return response(200, 'Update Admin Success', u'更新后台管理员成功') |
|
| 1739 |
+ |
|
| 1740 |
+ |
|
| 1741 |
+def administrator_delete(request): |
|
| 1742 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
|
|
| 1743 |
+ admin_id = request.POST.get('admin_id', '')
|
|
| 1744 |
+ target_admin_id = request.POST.get('target_admin_id', '')
|
|
| 1745 |
+ |
|
| 1746 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
| 1747 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
| 1748 |
+ |
|
| 1749 |
+ try: |
|
| 1750 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
| 1751 |
+ except AdministratorInfo.DoesNotExist: |
|
| 1752 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
| 1753 |
+ |
|
| 1754 |
+ if administrator.admin_type != AdministratorInfo.ADMINISTRATOR: |
|
| 1755 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_PERMISSION_DENIED) |
|
| 1756 |
+ |
|
| 1757 |
+ |
|
| 1758 |
+ AdministratorInfo.objects.filter(admin_id=target_admin_id).update(status=False) |
|
| 1759 |
+ |
|
| 1760 |
+ return response(200, 'Delete Admin Success', u'删除后台管理员成功') |
@@ -181,6 +181,11 @@ urlpatterns += [ |
||
| 181 | 181 |
url(r'^admin/member/goods/details$', admin_views.member_goods_details, name='member_goods_details'), |
| 182 | 182 |
url(r'^admin/member/goods/create$', admin_views.member_goods_create, name='member_goods_create'), |
| 183 | 183 |
url(r'^admin/member/goods/update$', admin_views.member_goods_update, name='member_goods_update'), |
| 184 |
+ |
|
| 185 |
+ url(r'^admin/administrator/list$', admin_views.administrator_list, name='administrator_list'), |
|
| 186 |
+ url(r'^admin/administrator/create$', admin_views.administrator_create, name='administrator_create'), |
|
| 187 |
+ url(r'^admin/administrator/update$', admin_views.administrator_update, name='administrator_update'), |
|
| 188 |
+ url(r'^admin/administrator/delete$', admin_views.administrator_delete, name='administrator_delete'), |
|
| 184 | 189 |
] |
| 185 | 190 |
|
| 186 | 191 |
urlpatterns += [ |
@@ -57,6 +57,16 @@ class AdministratorInfo(BaseModelMixin): |
||
| 57 | 57 |
def __unicode__(self): |
| 58 | 58 |
return u'{}-{}'.format(self.name, self.phone)
|
| 59 | 59 |
|
| 60 |
+ @property |
|
| 61 |
+ def admindata(self): |
|
| 62 |
+ return {
|
|
| 63 |
+ 'admin_id': self.admin_id, |
|
| 64 |
+ 'admin_type': self.admin_type, |
|
| 65 |
+ 'phone': self.phone, |
|
| 66 |
+ 'name': self.name, |
|
| 67 |
+ 'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d'), |
|
| 68 |
+ } |
|
| 69 |
+ |
|
| 60 | 70 |
|
| 61 | 71 |
class OperatorInfo(BaseModelMixin): |
| 62 | 72 |
ACTIVATED = 1 |
@@ -128,6 +128,8 @@ class MaintenanceStatusCode(BaseStatusCode): |
||
| 128 | 128 |
class AdministratorStatusCode(BaseStatusCode): |
| 129 | 129 |
""" 操作员相关错误码 4002xx """ |
| 130 | 130 |
ADMINISTRATOR_NOT_FOUND = StatusCodeField(400201, 'Administrator Not Found', description=u'管理员不存在') |
| 131 |
+ ADMINISTRATOR_PERMISSION_DENIED = StatusCodeField(508002, 'Administrator Permission Denied', description=u'管理员权限不足') |
|
| 132 |
+ |
|
| 131 | 133 |
# 密码 |
| 132 | 134 |
ADMINISTRATOR_PASSWORD_ERROR = StatusCodeField(400202, 'Administrator Password Error', description=u'管理员密码错误') |
| 133 | 135 |
# 手机号 |