- vừa được xem lúc

Firebase chats và cách tổ chức dữ liệu members, messages và bảo mật thông tin chats | Rules Firebase

0 0 36

Người đăng: tips javascript

Theo Viblo Asia

Bài viết gốc: anonystick.com

Giả sử bạn có một ứng dụng trò chuyện mà bạn muốn kích hoạt cuộc trò chuyện riêng tư giữa một nhóm người được chọn or cá nhân và có thể hơn nữa là chia sẻ hình ảnh, video...

Nếu bạn đã hiểu cơ bản về firebase thì tôi khuyên bạn nên xem video về cách triển khai Bảo mật tin nhắn của hệ thống khi sử dụng firebase

Và ví dụ bạn sẽ quyết định sử dụng firebase, một sdk mạnh mẽ về realtime cho đến hiện tại so với socket.io và quan trọng là có thể sử dụng làm database. Nhưng càng mạnh mẽ thì bạn phải thật cẩn thận khi chơi với nó. Bài này thì có lẽ tôi sẽ giúp một bạn, bạn ấy cần gấp cho nên tôi sẽ đi vào ví dụ cụ thể.

Security firebase

Các quy tắc bảo mật của Firebase có thể khá mạnh mẽ, nhưng đôi khi chúng yêu cầu một chút hướng dẫn. Điều này thực sự không phải vì chúng phức tạp, mà chủ yếu là vì hầu hết mọi người có xu hướng không sử dụng chúng thường xuyên nên có một chút khó khăn. Cũng may, tôi đã ở đây hehe... Vào việc anh em.

Quay lại, giả sử chúng ta đang triển khai một ứng dụng thay cho zalo chẳng hạn, thiết kế nhóm hay 2 người cũng là tương đối giống nhau. Bất kỳ ai trong nhóm trò chuyện đều có thể đọc và viết tin nhắn trò chuyện, nhưng chúng tôi không muốn người khác có thể nghe được.

Vậy cấu trúc của một hệ thống chat như thế nào? Bạn có thể tham khảo dưới đây. Tất nhiên, nếu bạn không muốn thì có rất nhiều cách để làm điều này, nhưng đây có lẽ là cách dễ nhất để cho các bạn hiểu được quyền trong firebase.

{
"rules": { "chats": { "$chatID": { "messages": { ".read": true } } } }
}

Nếu set ".read": true thì đương nhiên ai cũng có thể đọc được nội dung chat... Cho nên chúng ta sử lại như sau:

{
"rules": { "chats": { "$chatID": { "messages": { ".read": "data.parent().child('members').child(auth.uid).exists()", } } } }
}

Như vậy thì chúng ta có thể yên tâm, vì những ai có trong members mới có thể đọc, tương tự như vậy viết thì sao?

{
"rules": { "chats": { "$chatID": { "messages": { ".read": "data.parent().child('members').child(auth.uid).exists()", ".write": "data.parent().child('members').child(auth.uid).exists()" } } } }
}

Thì cũng như vậy, chúng ta cho phép tất cả các thành viên trong list members có thể chat và đọc thoải mái. Miễn là user đó có trong danh sách được phép. Như vậy chúng ta đã đi xong phần đơn giản nhất. Giờ đi cao hơn một chút.

Giả sử app zilo của chúng ta có chức năng cấm người đó chat, chỉ đọc thôi thì làm sao?

{
"rules": { "chats": { "$chatID": { "messages": { ".read": "data.parent().child('members').child(auth.uid).exists()", ".write": "data.parent().child('members').child(auth.uid).val() != 'listener'" } } } }
}

Nhưng làm như vậy thì chúng ta sẽ rất sơ hở, đó là những thành viên không có trong members vẫn có thể read hay write. CHúng ta đã sai từ chi tiết nhỏ nhất... Cho nên chúng ta nên như thế này

{
"rules": { "chats": { "$chatID": { "messages": { ".read": "data.parent().child('members').child(auth.uid).exists()", ".write": "data.parent().child('members').child(auth.uid).val() == 'owner' || data.parent().child('members').child(auth.uid).val()=='chatter'" } } } }
}

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Hướng dẫn làm bot Facebook messenger cho tài khoản cá nhân

Giới thiệu. Trong bài viết trước thì mình có hướng dẫn các bạn làm chatbot facebook messenger cho fanpage. Hôm nay mình sẽ hướng dẫn các bạn tạo chatbot cho một tài khoản facebook cá nhân. Chuẩn bị.

0 0 195

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 2

trong phần 1 mình đã giới thiệu về puppeteer và tạo được 1 project cùng một số file đầu tiên để các bạn có thể crawl dữ liệu từ một trang web bất kỳ. Bài này mình sẽ tiếp nối bài viết trước để hoàn thiện seri này.

0 0 73

- vừa được xem lúc

Điều React luôn giữ kín trong tim

■ Mở đầu. Ngồi viết bài khi đang nghĩ vu vơ chuyện con gà hay quả trứng có trước, mình phân vân chưa biết sẽ chọn chủ đề gì để chúng ta có thể cùng nhau bàn luận.

0 0 59

- vừa được xem lúc

Gửi Mail với Nodejs và AWS SES

AWS SES. AWS SES là gì.

0 0 83

- vừa được xem lúc

Crawl website sử dụng Node.js và Puppeteer - phần 1

Bài viết này mình sẽ giới thiệu cho các bạn craw dữ liệu của web site sử dụng nodejs và Puppeteer. .

0 0 164