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 ответ
Лучший способ - применить правила контроля доступа:
- Разрешить неограниченный доступ к публичной комнате (используйте логическое значение в вашей модели)
- Разрешить доступ к отдельной комнате для владельца
- Разрешить доступ к отдельной комнате для гостей
Для правил 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