# -*- coding: utf-8 -*- from django.core.serializers.json import json, DjangoJSONEncoder from channels.generic.websockets import JsonWebsocketConsumer class DjangoJsonWebsocketConsumer(JsonWebsocketConsumer): """Custom Json Websocket Consumer. Encode to JSON with DjangoJSONEncoder. """ @classmethod def encode_json(cls, content): return json.dumps(content, cls=DjangoJSONEncoder) class PermConsumerMixin(object): """Add support to check permissions on Consumers. Attributes: perms_connect (list): Required permissions to connect to this consumer. """ http_user = True # Enable message.user perms_connect = [] def connect(self, message, **kwargs): """Check permissions on connection.""" if message.user.has_perms(self.perms_connect): super().connect(message, **kwargs) else: self.close() class KPsul(PermConsumerMixin, DjangoJsonWebsocketConsumer): groups = ['kfet.kpsul'] perms_connect = ['kfet.is_team']