-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirestore.rules
More file actions
213 lines (172 loc) · 7.06 KB
/
Copy pathfirestore.rules
File metadata and controls
213 lines (172 loc) · 7.06 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Função para verificar se o usuário está autenticado
function isAuthenticated() {
return request.auth != null;
}
// Função para verificar se o usuário é admin
function isAdmin() {
return isAuthenticated() &&
exists(/databases/$(database)/documents/users/$(request.auth.uid)) &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'admin';
}
// Função para verificar se o usuário é dono do documento
function isOwner(userId) {
return isAuthenticated() && request.auth.uid == userId;
}
// Função para verificar se o usuário é empresa
function isCompany() {
return isAuthenticated() &&
exists(/databases/$(database)/documents/users/$(request.auth.uid)) &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'company';
}
// Função para verificar se o usuário é motorista
function isDriver() {
return isAuthenticated() &&
exists(/databases/$(database)/documents/users/$(request.auth.uid)) &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 'driver';
}
// Função para verificar se o usuário está ativo
function isActive() {
return isAuthenticated() &&
exists(/databases/$(database)/documents/users/$(request.auth.uid)) &&
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.status == 'active';
}
// Regras para usuários
match /users/{userId} {
// Usuários podem ler e atualizar apenas seus próprios dados
allow read, write: if isOwner(userId);
// Admins podem ler e atualizar todos os usuários
allow read, write: if isAdmin();
// Usuários podem ler perfis públicos de outros usuários (apenas dados básicos)
allow read: if isAuthenticated() &&
resource.data.status == 'active' &&
resource.data.role in ['driver', 'company'];
}
// Regras para fretes
match /freights/{freightId} {
// Usuários autenticados podem ler fretes ativos
allow read: if isAuthenticated() && resource.data.status == 'active';
// Empresas podem criar e gerenciar seus próprios fretes
allow create: if isCompany() && isActive();
allow update, delete: if isCompany() && isActive() &&
resource.data.companyId == request.auth.uid;
// Admins podem gerenciar todos os fretes
allow read, write: if isAdmin();
// Motoristas podem ler detalhes dos fretes para fazer propostas
allow read: if isDriver() && isActive();
}
// Regras para notificações
match /notifications/{notificationId} {
// Usuários podem ler apenas suas próprias notificações
allow read, write: if isAuthenticated() &&
resource.data.userId == request.auth.uid;
// Admins podem ler todas as notificações
allow read: if isAdmin();
}
// Regras para planos
match /plans/{planId} {
// Todos os usuários autenticados podem ler planos
allow read: if isAuthenticated();
// Apenas admins podem criar/editar/deletar planos
allow write: if isAdmin();
}
// Regras para transações de pagamento
match /payment_transactions/{transactionId} {
// Usuários podem ler apenas suas próprias transações
allow read: if isAuthenticated() &&
resource.data.userId == request.auth.uid;
// Admins podem ler todas as transações
allow read: if isAdmin();
// Apenas o sistema pode criar/atualizar transações
allow write: if false;
}
// Regras para assinaturas
match /subscriptions/{subscriptionId} {
// Usuários podem ler apenas suas próprias assinaturas
allow read: if isAuthenticated() &&
resource.data.userId == request.auth.uid;
// Admins podem ler todas as assinaturas
allow read: if isAdmin();
// Apenas o sistema pode criar/atualizar assinaturas
allow write: if false;
}
// Regras para tipos de veículos
match /vehicle_types/{typeId} {
// Todos os usuários autenticados podem ler
allow read: if isAuthenticated();
// Apenas admins podem modificar
allow write: if isAdmin();
}
// Regras para categorias de veículos
match /vehicle_categories/{categoryId} {
// Todos os usuários autenticados podem ler
allow read: if isAuthenticated();
// Apenas admins podem modificar
allow write: if isAdmin();
}
// Regras para tipos de carrocerias
match /body_types/{bodyTypeId} {
// Todos os usuários autenticados podem ler
allow read: if isAuthenticated();
// Apenas admins podem modificar
allow write: if isAdmin();
}
// Regras para veículos
match /vehicles/{vehicleId} {
// Usuários podem ler e gerenciar apenas seus próprios veículos
allow read, write: if isAuthenticated() &&
resource.data.ownerId == request.auth.uid;
// Admins podem gerenciar todos os veículos
allow read, write: if isAdmin();
}
// Regras para chat de suporte
match /users/{userId}/supportChat/{messageId} {
// Usuários podem ler e escrever apenas em seu próprio chat
allow read, write: if isOwner(userId);
// Admins podem ler todos os chats
allow read: if isAdmin();
}
// Regras para logs de admin
match /admin_logs/{logId} {
// Apenas admins podem ler e escrever logs
allow read, write: if isAdmin();
}
// Regras para estatísticas
match /statistics/{statId} {
// Usuários podem ler apenas suas próprias estatísticas
allow read: if isAuthenticated() &&
resource.data.userId == request.auth.uid;
// Admins podem ler todas as estatísticas
allow read: if isAdmin();
}
// Regras para colaboradores
match /collaborators/{collaboratorId} {
// Empresas podem gerenciar seus colaboradores
allow read, write: if isCompany() && isActive() &&
resource.data.companyId == request.auth.uid;
// Admins podem gerenciar todos os colaboradores
allow read, write: if isAdmin();
}
// Regras para histórico de fretes
match /freight_history/{historyId} {
// Usuários podem ler apenas seu próprio histórico
allow read: if isAuthenticated() &&
(resource.data.userId == request.auth.uid ||
resource.data.companyId == request.auth.uid);
// Admins podem ler todo o histórico
allow read: if isAdmin();
}
// Regras para configurações da plataforma
match /platform_config/{configId} {
// Apenas admins podem ler e modificar configurações
allow read, write: if isAdmin();
}
// Regras para auditoria
match /audit_logs/{logId} {
// Apenas admins podem ler logs de auditoria
allow read: if isAdmin();
}
}
}