Ejemplo n.º 1
0
 def get_super_users(self) -> dict:
     users = self.redis.hgetall(RedisKeys.global_roles())
     super_users = dict()
     for user_id in users.keys():
         user_id = str(user_id, 'utf-8')
         super_users[user_id] = self.get_user_name(user_id)
     return super_users
Ejemplo n.º 2
0
    def get_user_roles(self, user_id: str) -> dict:
        output = {
            'global': list(),
            'channel': dict(),
            'room': dict()
        }

        checked_channels = set()
        rooms = self.redis.hgetall(RedisKeys.rooms_for_user(user_id))

        global_roles = self.redis.hget(RedisKeys.global_roles(), user_id)
        if global_roles is not None:
            global_roles = str(global_roles, 'utf-8')
            output['global'] = [a for a in global_roles.split(',')]

        for room_id, _ in rooms.items():
            room_id = str(room_id, 'utf-8')
            channel_id = self.channel_for_room(room_id)
            room_roles = self.redis.hget(RedisKeys.room_roles(room_id), user_id)

            if channel_id not in checked_channels:
                checked_channels.add(channel_id)
                channel_roles = self.redis.hget(RedisKeys.channel_roles(channel_id), user_id)
                if channel_roles is not None:
                    channel_roles = str(channel_roles, 'utf-8')
                    output['channel'][channel_id] = [a for a in channel_roles.split(',')]

            if room_roles is not None:
                room_roles = str(room_roles, 'utf-8')
                output['room'][room_id] = [a for a in room_roles.split(',')]
        return output
Ejemplo n.º 3
0
 def _add_global_role(self, user_id: str, role: str):
     key = RedisKeys.global_roles()
     roles = self.redis.hget(key, user_id)
     if roles is None:
         roles = role
     else:
         roles = set(str(roles, 'utf-8').split(','))
         roles.add(role)
         roles = ','.join(roles)
     self.redis.hset(key, user_id, roles)
Ejemplo n.º 4
0
    def _remove_global_role(self, user_id: str, role: str):
        key = RedisKeys.global_roles()
        roles = self.redis.hget(key, user_id)
        if roles is None:
            return

        roles = set(str(roles, 'utf-8').split(','))
        if role not in roles:
            return

        roles.remove(role)
        roles = ','.join(roles)
        self.redis.hset(key, user_id, roles)
Ejemplo n.º 5
0
 def _has_global_role(self, user_id: str, role: str) -> bool:
     roles = self.redis.hget(RedisKeys.global_roles(), user_id)
     if roles is None:
         return False
     return role in str(roles, 'utf-8').split(',')