|
@@ -0,0 +1,130 @@
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
+"""
|
|
|
+@File : UserDeviceShareController.py
|
|
|
+@Time : 2023/1/7 15:05
|
|
|
+@Author : stephen
|
|
|
+@Email : zhangdongming@asj6.wecom.work
|
|
|
+@Software: PyCharm
|
|
|
+"""
|
|
|
+import logging
|
|
|
+import time
|
|
|
+
|
|
|
+from django.db import transaction
|
|
|
+from django.views import View
|
|
|
+
|
|
|
+from Model.models import DeviceSharePermission, DeviceChannelUserSet, DeviceChannelUserPermission
|
|
|
+from Object.ResponseObject import ResponseObject
|
|
|
+from Object.TokenObject import TokenObject
|
|
|
+
|
|
|
+LOGGER = logging.getLogger('info')
|
|
|
+
|
|
|
+
|
|
|
+class UserDeviceShareView(View):
|
|
|
+
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.GET, request, operation)
|
|
|
+
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
+ request.encoding = 'utf-8'
|
|
|
+ operation = kwargs.get('operation')
|
|
|
+ return self.validation(request.POST, request, operation)
|
|
|
+
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
+ token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
|
|
|
+ lang = request_dict.get('lang', token.lang)
|
|
|
+ response = ResponseObject(lang)
|
|
|
+ if token.code != 0:
|
|
|
+ return response.json(token.code)
|
|
|
+ if operation == 'user-permissions':
|
|
|
+ return self.get_user_share_permission(request_dict, response)
|
|
|
+ elif operation == 'permissions-save':
|
|
|
+ return self.user_channel_permission_save(request_dict, response)
|
|
|
+ else:
|
|
|
+ return response.json(404)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_user_share_permission(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 获取用户分享权限
|
|
|
+ @param request_dict: 设备uid
|
|
|
+ @param response: 响应对象
|
|
|
+ @return: permission List
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ user_id = request_dict.get('userId', None)
|
|
|
+ if not all([user_id, uid]):
|
|
|
+ return response(444, 'uid and userId is required')
|
|
|
+ user_permission_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid) \
|
|
|
+ .values('id', 'channels')
|
|
|
+ if not user_permission_qs.exists():
|
|
|
+ return response.json(0, [])
|
|
|
+ up_id = user_permission_qs[0]['id']
|
|
|
+ channel_permission_qs = DeviceChannelUserPermission.objects.filter(channel_user_id=up_id) \
|
|
|
+ .values('permission_id', 'channel_user_id')
|
|
|
+ if not channel_permission_qs.exists():
|
|
|
+ return response.json(0, [])
|
|
|
+ data = {'channels': [int(val) for val in user_permission_qs[0]['channels'].split(',')]}
|
|
|
+ p_list = []
|
|
|
+ for item in channel_permission_qs:
|
|
|
+ permission_qs = DeviceSharePermission.objects.filter(id=item['permission_id']) \
|
|
|
+ .values('code')
|
|
|
+ if not permission_qs.exists():
|
|
|
+ continue
|
|
|
+ p_list.append({'permissionId': item['permission_id'], 'code': permission_qs[0]['code']})
|
|
|
+ data['permissions'] = p_list
|
|
|
+ return response.json(0, data)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def user_channel_permission_save(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 主用户分享设备时设置通道权限保存
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ uid = request_dict.get('uid', None)
|
|
|
+ channels = request_dict.get('channels', None) # 通道集合,多个','隔开
|
|
|
+ user_id = request_dict.get('userId', None)
|
|
|
+ permission_ids = request_dict.get('permissionIds', None) # 权限集合,多个','隔开
|
|
|
+ if not all([user_id, uid, channels, permission_ids]):
|
|
|
+ return response.json(444)
|
|
|
+ p_ids = []
|
|
|
+ device_user_set = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid)
|
|
|
+ now_time = int(time.time())
|
|
|
+ with transaction.atomic():
|
|
|
+ is_delete = False
|
|
|
+ if not device_user_set.exists():
|
|
|
+ device_set = {'uid': uid, 'user_id': user_id, 'channels': channels,
|
|
|
+ 'created_time': now_time, 'updated_time': now_time}
|
|
|
+ device_user_set = DeviceChannelUserSet.objects.create(**device_set)
|
|
|
+ channel_user_id = device_user_set.id
|
|
|
+ else:
|
|
|
+ DeviceChannelUserSet.objects.update(channels=channels, updated_time=now_time)
|
|
|
+ channel_user_id = device_user_set.first().id
|
|
|
+ is_delete = True
|
|
|
+ if ',' in permission_ids:
|
|
|
+ p_ids = [int(val) for val in permission_ids.split(',')]
|
|
|
+ if is_delete:
|
|
|
+ DeviceChannelUserPermission.objects.filter(
|
|
|
+ channel_user_id=channel_user_id).delete()
|
|
|
+ if not p_ids:
|
|
|
+ channel_permission = {'permission_id': int(permission_ids),
|
|
|
+ 'channel_user_id': channel_user_id,
|
|
|
+ 'created_time': now_time}
|
|
|
+ DeviceChannelUserPermission.objects.create(**channel_permission)
|
|
|
+ else:
|
|
|
+ channel_permission_list = []
|
|
|
+ for item in p_ids:
|
|
|
+ channel_permission_list.append(DeviceChannelUserPermission(
|
|
|
+ permission_id=int(item),
|
|
|
+ channel_user_id=channel_user_id,
|
|
|
+ created_time=now_time))
|
|
|
+ DeviceChannelUserPermission.objects.bulk_create(channel_permission_list)
|
|
|
+ return response.json(0)
|
|
|
+ except Exception as e:
|
|
|
+ LOGGER.info('异常详情,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
+ return response.json(500, repr(e))
|