2017-02-19 20 views
0

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

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)); 
      })) 
     ); 
    } 
} 

Извините за мой язык. Благодаря

ответ

0

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

  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": [] 
} 

ссылка Usefull:

 Смежные вопросы

  • Нет связанных вопросов^_^