Loopback частный чат с использованием Fireloop.io

Я новичок в использовании nodejs с Loopback. Я работаю в своем офисе, чтобы создать приложение для чата в реальном времени. Мой начальник предложил мне использовать fireloop.io, и я всегда читаю документацию с http://docs.fireloop.io/en/api/ и успех успешно реализуется. Но проблема в том, чтобы создать приватный чат. Я также следую инструкциям из раздела "Работа с дочерними ссылками" в документе, но после отправки сообщения оно передается всем клиентам, подключенным к серверу. Мой код такой же, как документ:

import { Component } from '@angular/core';
import { RealTime } from './shared/sdk/services';
import { Room, Message, FireLoopRef } from './shared/sdk/models';
@Component(...)
export class AppComponent {
  private RoomReference: FireLoopRef<Room>;
  private MessageReference: FireLoopRef<Message>;
  private room: Room = new Room({ name: 'FireLoop Room' });
  private message: Room = new Message({ text: 'Test Message' });
  constructor(private realTime: RealTime) {
    this.realTime
        .onReady()
        .subscribe(() =>
            this.RoomReference = this.realTime.FireLoop.ref<Room>(Room)
            this.RoomReference.upsert(this.room).subscribe((instance: Room) => {
             // Create a Child Reference
             this.MessageReference = RoomReference.make(instance).child<Message>('messages');
             this.MessageReference.on('value').subscribe(
                (messages: Array<Message>) => this.logger.info(messages)
              );
              MessageReference.upsert(this.message).subscribe((res: Message) => console.log(res.text));
            }))
        );
  }
}

Извините за мой язык. Спасибо

1 ответ

Лучший способ - применить правила контроля доступа:

  1. Разрешить неограниченный доступ к публичной комнате (используйте логическое значение в вашей модели)
  2. Разрешить доступ к отдельной комнате для владельца
  3. Разрешить доступ к отдельной комнате для гостей

Для правил 2 и 3 ваш код должен выглядеть примерно так:

{
  "name": "Room",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "name": {
      "type": "string"
    }
  },
  "validations": [],
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "user",
      "foreignKey": "ownerId"
    },
  {
    "members": {
      "type": "hasMany",
      "model": "user",
      "foreignKey": "memberId"
    }
  },
  "acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "member",
      "permission": "ALLOW",
      "property": "findById"
    },
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
  ],
  "methods": []
}

Полезная ссылка: https://loopback.io/doc/en/lb2/Controlling-data-access.html

Другие вопросы по тегам