質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2374閲覧

Firebaseでのデータ設計について教えてください。

o24

総合スコア48

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

NoSQL

NoSQL(not only SQL)は、リレーショナルデータベース管理システムとは異なるデータベースシステムを指す言葉です。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2018/01/05 14:33

Firebase(NOSQL)でどのようなデータ構造にすべきか悩んでおります。

用件

  • データベースにx件のニュースが投稿される

※今回は投稿(書き込み)部分のパーミッションについては無視してください。

  • 本システムを利用できるユーザーはx人存在し、管理者が承認したユーザのみがニュースを閲覧できる。
  • 承認されたユーザは全てのニュースを閲覧できるわけではなく、許可されたニュースのみ閲覧できる。

サンプル

以下 -useridxxxxauth.uid と同じです。

  • 投稿されたニュースは2件
  • ユーザ1(-userid0001)は ニュース2件とも閲覧できる
  • ユーザ2(-userid0002)は ニュース1(-newsid0001)のみ閲覧できる
  • ユーザ3(-userid0003)は どのニュースも閲覧できない

ルール

{ "rules": { ".read": false, ".write": false, "news" : { "$news_id" : { ".read" : "root.child('users/'+ auth.uid +'/news/'+$news_id).exists()" } } } }

データ構造

{ news : { -newsid0001 : { title : "タイトル0001", message : "メッセージ0001", read_users : { // 各ニュースごとに閲覧できるユーザのUIDを以下へ追加 -userid0001 : true, } }, -newsid0002 : { title : "タイトル0002", message : "メッセージ0002", read_users : { // 各ニュースごとに閲覧できるユーザのUIDを以下へ追加 -userid0001 : true, -userid0002 : true, } }, } users : { // 以下 -useridxxxxがユーザIDとなります。 -userid0001 : { news : { -newsid0001 : true, -newsid0002 : true, } }, -userid0002 : { news : { -newsid0001 : true, } }, -userid0003 : { }, }, }

一応上記の通りにすればセキュリティ面ではクリアできますが、データの取得が /news で取得できないため、 /news/$news_id でループして取得するようになってしまい、クライアント側のコードも増え、APIリクエストも増えてしまうのが気がかりです。

より良い設計をご存知の方アドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一見無駄に見えるかもしれませんが,ユーザ毎にニュースのタイムラインをそれぞれ用意してあげるとシンプルになります.

投稿2018/01/06 00:54

Yatima

総合スコア1159

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

o24

2018/01/07 05:06

いつもご回答ありがとうございます。 頂いたアドバイスを元にもう一度検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問