File tree Expand file tree Collapse file tree 11 files changed +4086
-0
lines changed
unit-test-security-rules-v9 Expand file tree Collapse file tree 11 files changed +4086
-0
lines changed Original file line number Diff line number Diff line change
1
+ {
2
+ "projects": {
3
+ "default": "demo-example-testing"
4
+ }
5
+ }
Original file line number Diff line number Diff line change
1
+ # Logs
2
+ logs
3
+ * .log
4
+ npm-debug.log *
5
+ yarn-debug.log *
6
+ yarn-error.log *
7
+ firebase-debug.log *
8
+
9
+ # Firebase cache
10
+ .firebase /
11
+
12
+ # Firebase config
13
+
14
+ # Uncomment this if you'd like others to create their own Firebase project.
15
+ # For a team working on the same Firebase project(s), it is recommended to leave
16
+ # it commented so all members can deploy to the same project(s) in .firebaserc.
17
+ # .firebaserc
18
+
19
+ # Runtime data
20
+ pids
21
+ * .pid
22
+ * .seed
23
+ * .pid.lock
24
+
25
+ # Directory for instrumented libs generated by jscoverage/JSCover
26
+ lib-cov
27
+
28
+ # Coverage directory used by tools like istanbul
29
+ coverage
30
+
31
+ # nyc test coverage
32
+ .nyc_output
33
+
34
+ # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
35
+ .grunt
36
+
37
+ # Bower dependency directory (https://bower.io/)
38
+ bower_components
39
+
40
+ # node-waf configuration
41
+ .lock-wscript
42
+
43
+ # Compiled binary addons (http://nodejs.org/api/addons.html)
44
+ build /Release
45
+
46
+ # Dependency directories
47
+ node_modules /
48
+
49
+ # Optional npm cache directory
50
+ .npm
51
+
52
+ # Optional eslint cache
53
+ .eslintcache
54
+
55
+ # Optional REPL history
56
+ .node_repl_history
57
+
58
+ # Output of 'npm pack'
59
+ * .tgz
60
+
61
+ # Yarn Integrity file
62
+ .yarn-integrity
63
+
64
+ # dotenv environment variables file
65
+ .env
Original file line number Diff line number Diff line change
1
+ # Unit Test Security Rules with JS SDK v9
2
+
3
+ This sample demonstrates how to write ** unit tests** for security rules
4
+ using the Firebase Emulator Suite, with latest modular JS SDK v9 and
5
+ ` @firebase/rules-unit-testing ` v2.
6
+
7
+ ## Setup
8
+
9
+ To install the dependencies for this sample run ` npm install ` inside this directory.
10
+ You will also need the [ Firebase CLI] ( https://firebase.google.com/docs/cli ) .
11
+
12
+ ## Run
13
+
14
+ To run the Realtime Database tests:
15
+
16
+ ```
17
+ firebase emulators:exec --only database "npm run test-database"
18
+ ```
19
+
20
+ To run the Cloud Firestore tests:
21
+
22
+ ```
23
+ firebase emulators:exec --only firestore "npm run test-firestore"
24
+ ```
Original file line number Diff line number Diff line change
1
+ {
2
+ "rules" : {
3
+ "users" : {
4
+ "$userId" : {
5
+ ".read" : true ,
6
+ ".write" : " auth.uid == $userId"
7
+ }
8
+ },
9
+ "rooms" : {
10
+ "$roomId" : {
11
+ ".write" : " data.child('owner').val() == auth.uid || !data.exists()" ,
12
+ ".validate" : " newData.hasChild('owner')" ,
13
+ "owner" : {
14
+ ".validate" : " newData.isString() && newData.val() == auth.uid"
15
+ },
16
+ "members" : {
17
+ "$memberId" : {
18
+ ".write" : " !newData.exists() && auth.uid == $memberId"
19
+ }
20
+ },
21
+ "messages" : {
22
+ ".read" : " auth != null && data.parent().child('members').child(auth.uid).exists()" ,
23
+ "$messageId" : {
24
+ ".write" : " auth != null && data.parent().child('members').child(auth.uid).exists()"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ {
2
+ "database" : {
3
+ "rules" : " database.rules.json"
4
+ },
5
+ "storage" : {
6
+ "rules" : " storage.rules"
7
+ },
8
+ "firestore" : {
9
+ "rules" : " firestore.rules" ,
10
+ "indexes" : " firestore.indexes.json"
11
+ },
12
+ "emulators" : {
13
+ "firestore" : {
14
+ "port" : 8080
15
+ },
16
+ "database" : {
17
+ "port" : 9000
18
+ },
19
+ "ui" : {
20
+ "enabled" : true
21
+ },
22
+ "storage" : {
23
+ "port" : 9199
24
+ }
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ rules_version = ' 2' ;
2
+ service cloud .firestore {
3
+ match / databases/ {database }/ documents {
4
+ match / users/ {userId } {
5
+ allow read ;
6
+ allow create : if request .auth.uid == userId && request .resource.data.createdAt == request .time ;
7
+ }
8
+ match / rooms/ {roomId } {
9
+ allow read ;
10
+ // If you create a room, you must set yourself as the owner.
11
+ allow create : if request .resource.data.owner == request .auth.uid ;
12
+ // Only the room owner is allowed to modify it, and owner mustn't be able to assign his room to other user.
13
+ allow update : if resource.data.owner == request .auth.uid && request .resource.data.owner == request .auth.uid ;
14
+ }
15
+ }
16
+ }
You can’t perform that action at this time.
0 commit comments