Tweak Firestore user rules to be more robust (#750)
This commit is contained in:
		
							parent
							
								
									facb19a347
								
							
						
					
					
						commit
						e4239d0122
					
				|  | @ -20,17 +20,17 @@ service cloud.firestore { | ||||||
| 
 | 
 | ||||||
|     match /users/{userId} { |     match /users/{userId} { | ||||||
|       allow read; |       allow read; | ||||||
|       allow update: if resource.data.id == request.auth.uid |       allow update: if userId == request.auth.uid | ||||||
|                        && request.resource.data.diff(resource.data).affectedKeys() |                        && request.resource.data.diff(resource.data).affectedKeys() | ||||||
|                                                                     .hasOnly(['bio', 'bannerUrl', 'website', 'twitterHandle', 'discordHandle', 'followedCategories', 'lastPingTime','shouldShowWelcome']); |                                                                     .hasOnly(['bio', 'bannerUrl', 'website', 'twitterHandle', 'discordHandle', 'followedCategories', 'lastPingTime','shouldShowWelcome']); | ||||||
|       // User referral rules |       // User referral rules | ||||||
|       allow update: if resource.data.id == request.auth.uid |       allow update: if userId == request.auth.uid | ||||||
|                          && request.resource.data.diff(resource.data).affectedKeys() |                          && request.resource.data.diff(resource.data).affectedKeys() | ||||||
|                           .hasOnly(['referredByUserId', 'referredByContractId', 'referredByGroupId']) |                           .hasOnly(['referredByUserId', 'referredByContractId', 'referredByGroupId']) | ||||||
|                           // only one referral allowed per user |                           // only one referral allowed per user | ||||||
|                           && !("referredByUserId" in resource.data) |                           && !("referredByUserId" in resource.data) | ||||||
|                           // user can't refer themselves |                           // user can't refer themselves | ||||||
|                           && !(resource.data.id == request.resource.data.referredByUserId); |                           && !(userId == request.resource.data.referredByUserId); | ||||||
|                           // quid pro quos enabled (only once though so nbd) - bc I can't make this work: |                           // quid pro quos enabled (only once though so nbd) - bc I can't make this work: | ||||||
|                           // && (get(/databases/$(database)/documents/users/$(request.resource.data.referredByUserId)).referredByUserId == resource.data.id); |                           // && (get(/databases/$(database)/documents/users/$(request.resource.data.referredByUserId)).referredByUserId == resource.data.id); | ||||||
|     } |     } | ||||||
|  | @ -60,8 +60,8 @@ service cloud.firestore { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     match /private-users/{userId} { |     match /private-users/{userId} { | ||||||
|       allow read: if resource.data.id == request.auth.uid || isAdmin(); |       allow read: if userId == request.auth.uid || isAdmin(); | ||||||
|       allow update: if (resource.data.id == request.auth.uid || isAdmin()) |       allow update: if (userId == request.auth.uid || isAdmin()) | ||||||
|                        && request.resource.data.diff(resource.data).affectedKeys() |                        && request.resource.data.diff(resource.data).affectedKeys() | ||||||
|                        .hasOnly(['apiKey', 'unsubscribedFromResolutionEmails', 'unsubscribedFromCommentEmails', 'unsubscribedFromAnswerEmails', 'notificationPreferences' ]); |                        .hasOnly(['apiKey', 'unsubscribedFromResolutionEmails', 'unsubscribedFromCommentEmails', 'unsubscribedFromAnswerEmails', 'notificationPreferences' ]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user