-
Notifications
You must be signed in to change notification settings - Fork 66
Expand file tree
/
Copy pathsecurity_rules_example.dart
More file actions
131 lines (121 loc) · 4.21 KB
/
security_rules_example.dart
File metadata and controls
131 lines (121 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2024, the dart_firebase_admin project authors. All rights reserved.
// Use of this source code is governed by an Apache 2.0 license that can be
// found in the LICENSE file.
import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:dart_firebase_admin/security_rules.dart';
Future<void> securityRulesExample(FirebaseApp admin) async {
print('\n### Security Rules Example ###\n');
final securityRules = admin.securityRules();
// Example 1: Get the currently applied Firestore ruleset
try {
print('> Fetching current Firestore ruleset...\n');
final ruleset = await securityRules.getFirestoreRuleset();
print('Current Firestore ruleset:');
print(' - Name: ${ruleset.name}');
print(' - Created: ${ruleset.createTime}');
print('');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error fetching Firestore ruleset: $e');
}
// Example 2: Deploy new Firestore rules from source
try {
print('> Deploying new Firestore rules...\n');
const source = """
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
""";
final ruleset = await securityRules.releaseFirestoreRulesetFromSource(
source,
);
print('Firestore rules deployed successfully!');
print(' - Ruleset name: ${ruleset.name}');
print('');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error deploying Firestore rules: $e');
}
// Example 3: Get the currently applied Storage ruleset
try {
print('> Fetching current Storage ruleset...\n');
final ruleset = await securityRules.getStorageRuleset();
print('Current Storage ruleset:');
print(' - Name: ${ruleset.name}');
print(' - Created: ${ruleset.createTime}');
print('');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error fetching Storage ruleset: $e');
}
// Example 4: Deploy new Storage rules from source
try {
print('> Deploying new Storage rules...\n');
const source = """
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
""";
final ruleset = await securityRules.releaseStorageRulesetFromSource(source);
print('Storage rules deployed successfully!');
print(' - Ruleset name: ${ruleset.name}');
print('');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error deploying Storage rules: $e');
}
// Example 5: Create a ruleset and delete it
try {
print('> Creating a standalone ruleset...\n');
const source = """
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
""";
final rulesFile = RulesFile(name: 'firestore.rules', content: source);
final ruleset = await securityRules.createRuleset(rulesFile);
print('Ruleset created: ${ruleset.name}');
await securityRules.deleteRuleset(ruleset.name);
print('Ruleset deleted successfully!\n');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error creating/deleting ruleset: $e');
}
// Example 6: List existing rulesets
try {
print('> Listing rulesets...\n');
final result = await securityRules.listRulesetMetadata(pageSize: 10);
print('Found ${result.rulesets.length} ruleset(s):');
for (final meta in result.rulesets) {
print(' - ${meta.name} (created: ${meta.createTime})');
}
if (result.nextPageToken != null) {
print(' (more rulesets available — use nextPageToken to paginate)');
}
print('');
} on FirebaseSecurityRulesException catch (e) {
print('> Security Rules error: ${e.code} - ${e.message}');
} catch (e) {
print('> Error listing rulesets: $e');
}
}