⏰
firestore security rulesで時間(Timestamp)を比較判定する
結論 - request.timeとduration.timeを使う
- request.timeで現在時刻
- timestampとduration.timeで比較対象の計算
- request.timeと2を比較する
// 予約時間の15分前以前はcreateを許可する
allow create: if
request.time < (
request.resource.data.reservation_time - duration.time(0, 15, 0, 0)
);
request.timeとduration.timeで時間比較
firestore rules requst time - document
// firestoreにリクエストを送信したserver time
request.time
firestore rules duration - document
// firestore security rules上でtimestampと計算、比較できる値を生成する
// time(Hours, Minutes, Seconds, Nanoseconds)の引数を与える
// 下記は15分を生成
duration.time(0, 15, 0, 0)
全体コード
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// articles
match /articles/{article=**} {
// 新規登録: 投稿予定時間の15分前以前のみ
allow create: if
request.time < (
request.resource.data.reservation_time - duration.time(0, 15, 0, 0)
);
// 更新: 投稿予定時間の15分前以前のみ
allow update: if
request.time < (
resource.data.reservation_time - duration.time(0, 15, 0, 0)
)
&& request.time < (
request.resource.data.reservation_time - duration.time(0, 15, 0, 0)
);
// 削除: 投稿予定時間の15分前以前のみ
allow delete: if
&& request.time < (
resource.data.reservation_time - duration.time(0, 15, 0, 0)
)
}
}
}
Discussion