Firestoreで createdAt , upcatedAt を追加する
import { addDoc, collection, serverTimestamp } from 'firebase/firestore'
serverTimestamp() 現在時刻をセットすることができます
// 追加するdata
const d = dayjs().format('YYYY-MM-DD_HH_mm_ss')
const data = {
name: `Tあり追加のテスト-${d}`,
text: `追加時刻は ${d}`,
createdAt: serverTimestamp(),
updatedAt: serverTimestamp()
}
// addDoc() で追加する
const colRef = collection(firebaseDB, 'users', user.uid, 'hogehoge')
await addDoc(colRef, data)
createdAt が null の場合は serverTimestamp() でサーバーの時間を自動に設定する。
updatedAt は 常に serverTimestamp() でサーバーの時間を自動に設定する。
toFirestore(news: News): DocumentData {
return {
...news.toArray(),
createdAt: news.createdAt === null ? serverTimestamp() : Timestamp.fromDate(new Date(news.createdAt)),
updatedAt: serverTimestamp()
}
},
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userID}/{document=**} {
// read ( get , list に分類される)と write ( create , update , delete に分類される)
allow read: if
isSameAsLoginUser(userID) // rule (現在ログインしているユーザのuidが同じIDかどうか?)
allow create, update: if
hasFields(["createdAt", "updatedAt"]) && // rule (createdAt , updatedAt を含むか?)
isSameAsLoginUser(userID) // rule (現在ログインしているユーザのuidが同じIDかどうか?)
allow delete: if
isSameAsLoginUser(userID) // rule (現在ログインしているユーザのuidが同じIDかどうか?)
}
// columnList で 渡されてきたすべてのカラムが登録したいデータオブジェクトに存在するか
function hasFields(columnList) {
return request.resource.data.keys().hasAll(columnList);
}
// userID で 渡されてきたユーザーのuidと現在ログインしているユーザのuidが同じIDかどうか?
function isSameAsLoginUser(userID) {
return request.auth.uid == userID;
}
}
}
引用 : https://zenn.dev/yucatio/articles/c5cc8718f54fd7
セキュリティルール については合わせてこちらも読んでおくと良いでしょう
https://zenn.dev/kosukesaigusa/articles/efc2528898954d95a6ae