Forráskód Böngészése

推送项目上线通道权限

zhangdongming 2 éve
szülő
commit
2dbd6cf316
2 módosított fájl, 97 hozzáadás és 1 törlés
  1. 67 0
      Model/models.py
  2. 30 1
      Service/DevicePushService.py

+ 67 - 0
Model/models.py

@@ -2401,3 +2401,70 @@ class SmartScene(models.Model):
         db_table = 'smart_scene'
         verbose_name = '智能场景'
         verbose_name_plural = verbose_name
+
+
+class DeviceChannelUserSet(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    uid = models.CharField(blank=True, db_index=True, max_length=32, verbose_name=u'设备UID')
+    channels = models.CharField(default='', blank=True, max_length=128, verbose_name=u'用户通道多个逗号隔开')
+    user_id = models.CharField(default='', db_index=True, max_length=32, verbose_name=u'用户id')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'device_channel_user_set'
+        verbose_name = '设备通道用户设置'
+        verbose_name_plural = verbose_name
+
+
+class DeviceSharePermission(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    code = models.CharField(blank=True, db_index=True, max_length=32, verbose_name=u'权限编码')
+    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'device_share_permission'
+        verbose_name = '设备分享权限'
+        verbose_name_plural = verbose_name
+
+
+class DevicePermissionLang(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    permission_id = models.IntegerField(default=0, verbose_name=u'关联设备权限ID')
+    name = models.CharField(default='', max_length=50, verbose_name=u'权限名称')
+    desc = models.CharField(blank=True, max_length=64, default='', verbose_name=u'描述')
+    lang = models.CharField(default='', max_length=20, db_index=True, verbose_name='例如:cn')
+    sort = models.IntegerField(default=99, blank=True, verbose_name=u'排序,越小越靠前')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'device_permission_lang'
+        verbose_name = '设备分享权限语言描述'
+        verbose_name_plural = verbose_name
+
+
+class DeviceChannelUserPermission(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    permission_id = models.IntegerField(default=0, verbose_name=u'关联设备权限ID')
+    channel_user_id = models.IntegerField(default=0, verbose_name=u'通道用户id')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'device_channel_user_permission'
+        verbose_name = '设备分享权限关联通道用户'
+        verbose_name_plural = verbose_name
+
+
+class DeviceTypeSharePermission(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增id')
+    permission_id = models.IntegerField(default=0, verbose_name=u'关联设备权限ID')
+    type = models.SmallIntegerField(default=0, verbose_name='设备类型')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'device_type_share_permission'
+        verbose_name = '设备类型关联分享权限'
+        verbose_name_plural = verbose_name

+ 30 - 1
Service/DevicePushService.py

@@ -21,7 +21,8 @@ from pyfcm import FCMNotification
 from AnsjerPush.config import JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, BASE_DIR, APNS_MODE, APP_BUNDLE_DICT, \
     XMPUSH_CONFIG, VIVOPUSH_CONFIG, OPPOPUSH_CONFIG, MEIZUPUSH_CONFIG
 from AnsjerPush.config import SERVER_TYPE
-from Model.models import UidPushModel, SysMsgModel
+from Model.models import UidPushModel, SysMsgModel, DeviceSharePermission, DeviceChannelUserSet, \
+    DeviceChannelUserPermission
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.UidTokenObject import UidTokenObject
@@ -540,3 +541,31 @@ class DevicePushService:
             ExpiresIn=3600
         )
         return response_url
+
+    @staticmethod
+    def check_share_permission(user_id, channel, uid):
+        """
+        检查用户是否有权限接收设备报警推送
+        """
+        user_permission_qs = DeviceChannelUserSet.objects.filter(user_id=user_id, uid=uid) \
+            .values('id', 'channels')
+        # 根据当前用户与uid查询是否设置过通道权限,不存在则不是分享设备
+        if not user_permission_qs.exists():
+            return True
+        up_id = user_permission_qs[0]['id']
+        channels = user_permission_qs[0]['channels']
+        channels_list = [int(val) for val in channels.split(',')]
+        # 当前uid是属于分享设备并且设置了权限
+        # 判断通道是否设置了权限,不存在则当前通道没有权限接受消息推送
+        if int(channel) not in channels_list:
+            return False
+        permission_qs = DeviceSharePermission.objects.filter(code='AlarmMessages').values('id')
+        p_id = permission_qs[0]['id']
+
+        # 当前通道存在设置则查看是否有 消息推送权限
+        channel_permission_qs = DeviceChannelUserPermission.objects \
+            .filter(channel_user_id=up_id, permission_id=p_id) \
+            .values('permission_id', 'channel_user_id')
+        if not channel_permission_qs.exists():
+            return False
+        return True