|
@@ -15,13 +15,15 @@ from django.contrib.auth import get_user_model
|
|
|
|
|
|
User = get_user_model()
|
|
|
from apps.account.serializers import JWTSerializer, EmployeeSerializer, \
|
|
|
- WechatLoginSerializer, WechatBindSerializer
|
|
|
+ WechatLoginSerializer, WechatBindSerializer, GroupDictSerializer, GroupSerializer
|
|
|
from utils.custom_modelviewset import CustomModelViewSet
|
|
|
-from apps.account.filters import UserFilter
|
|
|
+from apps.account.filters import UserFilter, GroupFilter
|
|
|
from apps.log.models import BizLog
|
|
|
from utils.exceptions import CustomError
|
|
|
from apps.account.models import CustomerWechat
|
|
|
from utils.wx.WXBizDataCrypt import WXBizDataCrypt
|
|
|
+from apps.account.consts import PermissionMenu
|
|
|
+from collections import OrderedDict
|
|
|
|
|
|
class LoginView(ObtainJSONWebToken):
|
|
|
serializer_class = JWTSerializer
|
|
@@ -102,6 +104,48 @@ class EmployeeViewSet(CustomModelViewSet):
|
|
|
BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
|
|
|
u'修改用户[%s],id=%d' % (instance.name, instance.id), validated_data)
|
|
|
|
|
|
+class GroupsViewSet(CustomModelViewSet):
|
|
|
+ permission_classes = [isLogin, ]
|
|
|
+ queryset = Group.objects.filter()
|
|
|
+ serializer_class = GroupSerializer
|
|
|
+
|
|
|
+ @permission_required('account.manager_permissions')
|
|
|
+ def filter_queryset(self, queryset):
|
|
|
+ if not self.request.user.is_superuser:
|
|
|
+ groups = self.request.user.groups.all()
|
|
|
+ queryset = queryset.filter(id__in=[g.id for g in groups])
|
|
|
+ f = GroupFilter(self.request.GET, queryset=queryset)
|
|
|
+ return f.qs
|
|
|
+
|
|
|
+ @permission_required('account.manager_permissions')
|
|
|
+ def perform_create(self, serializer):
|
|
|
+ super(GroupsViewSet, self).perform_create(serializer)
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.INSERT,
|
|
|
+ u'添加权限组[%s],id=%d' % (instance.name, instance.id), validated_data)
|
|
|
+
|
|
|
+ @permission_required('account.manager_permissions')
|
|
|
+ def perform_update(self, serializer):
|
|
|
+ super(GroupsViewSet, self).perform_update(serializer)
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
|
|
|
+ u'修改权限组[%s],id=%d' % (instance.name, instance.id), validated_data)
|
|
|
+
|
|
|
+ @permission_required('account.manager_permissions')
|
|
|
+ def destroy(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ # user_count = instance.user_set.all().count()
|
|
|
+ # if user_count:
|
|
|
+ # raise CustomError(u'该权限组已分配给用户,禁止删除!')
|
|
|
+
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.DELETE,
|
|
|
+ u'删除权限组[%s],id=%d' % (instance.name, instance.id))
|
|
|
+ instance.delete()
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
|
|
|
class SetUserInfoView(APIView):
|
|
|
permission_classes = [isLogin, ]
|
|
@@ -154,3 +198,40 @@ class WxBindView(APIView):
|
|
|
return response_ok(ser.validated_data)
|
|
|
else:
|
|
|
return response_error('参数错误')
|
|
|
+
|
|
|
+
|
|
|
+class PermissionsListView(APIView):
|
|
|
+ permission_classes = [isLogin, ]
|
|
|
+
|
|
|
+ @permission_required('account.manager_permissions')
|
|
|
+ def get(self, request):
|
|
|
+ rows = Permission.objects.all().exclude(name__startswith='Can')
|
|
|
+ perms_menus = PermissionMenu()
|
|
|
+ rows = perms_menus.sort_perms(rows)
|
|
|
+ menus = OrderedDict()
|
|
|
+ for row in rows:
|
|
|
+ item = {'id': row.id, 'name': row.name}
|
|
|
+ mn = perms_menus.get_menuname_of_contenttype(row.content_type.app_label, row.content_type.model)
|
|
|
+ if mn in menus:
|
|
|
+ permissions = menus[mn]
|
|
|
+ else:
|
|
|
+ permissions = menus[mn] = OrderedDict()
|
|
|
+ if row.content_type.name in permissions:
|
|
|
+ if not item in permissions[row.content_type.name]:
|
|
|
+ permissions[row.content_type.name].append(item)
|
|
|
+ else:
|
|
|
+ permissions[row.content_type.name] = [item, ]
|
|
|
+ return response_ok(menus)
|
|
|
+
|
|
|
+
|
|
|
+class PermissionDictView(APIView):
|
|
|
+ permission_classes = [isLogin, ]
|
|
|
+
|
|
|
+ @permission_required('account.add_user')
|
|
|
+ def get(self, request):
|
|
|
+ rows = Group.objects.filter()
|
|
|
+ if not request.user.is_superuser:
|
|
|
+ groups = request.user.groups.all()
|
|
|
+ rows = rows.filter(id__in=[g.id for g in groups])
|
|
|
+ serializer = GroupDictSerializer(rows, many=True)
|
|
|
+ return response_ok(serializer.data)
|