Access Control Policy

Access Control

How WiserReview manages access to systems, infrastructure, and customer data. Least privilege and need-to-know are the foundation of every access decision.

Version

1.0

Effective Date

March 2026

Owner

Security Team

1. User Access Management

Provisioning (On Joining)

SystemAccess LevelProvisioned By
GitHub organizationRepository access based on roleEngineering Lead
Azure portalRead-only or scoped; Engineering Lead gets full accessSecurity Officer / Engineering Lead
MongoDB AtlasNo direct production access for developers; Engineering Lead onlySecurity Officer
CloudflareRead-only by default; admin access for Engineering Lead onlySecurity Officer
SlackStandard workspace accessEngineering Lead
Internal toolsRole-appropriate accessEngineering Lead

De-provisioning (On Departure)

All access is revoked within 24 hours. The Security Officer is responsible for ensuring this window is met for all departing team members.

  • GitHub organization membership revoked
  • Azure portal access removed
  • MongoDB Atlas access removed
  • Cloudflare access removed
  • Slack workspace access removed
  • All shared credentials rotated if the individual had access
  • Active sessions invalidated where possible

2. Role-Based Access Control

Merchant Workspace Roles

Each merchant workspace supports three roles. Role assignments are stored in the user's JWT token context and enforced server-side on every API request. Authorization is independently enforced in the backend regardless of UI state.

RolePermissions
AdminFull access to the workspace: review management, widget configuration, email sequences, branding, integrations, billing, team member invitations, account deletion
EditorReview management, widget configuration, email sequences, branding. Cannot access billing, integrations, or invite/remove team members
ViewerRead-only access to reviews and analytics. Cannot modify any settings or data

Internal Team Access

RoleAccess Scope
Security OfficerFull access to all systems: Azure portal, MongoDB Atlas, GitHub, Cloudflare, all production environments
Engineering LeadFull access to production infrastructure, CI/CD pipeline, Azure, MongoDB Atlas (read and operations), Cloudflare configuration
DeveloperGitHub repository access (code and staging environments). No direct production database access. No direct production container access.
SupportDashboard read-only access scoped to specific workspace(s) for support purposes only

3. Principle of Least Privilege

All access is granted at the minimum level required to perform the intended function.

Internal Access

  • Developers have no direct access to production databases or containers
  • All production changes go through the CI/CD pipeline only
  • MongoDB Atlas access restricted to Engineering Lead and Security Officer
  • No SSH access to production servers

Platform Integration Scopes

When merchants connect e-commerce platforms, WiserReview requests only the minimum OAuth scopes required for review requests, product matching, and widget injection. Platform passwords are never stored. Only OAuth tokens are stored, and they are encrypted.

4. Authentication Mechanisms

MechanismApplicationDetails
JWT Token AuthenticationAll API requestsSigned with server-side secret; defined expiration; claims include user identity, workspace context, and platform provider; requests with missing or invalid tokens rejected with HTTP 401
OAuth 2.0Platform integrationsAuthorization code flow; access token stored encrypted; merchant platform password never accessed; HMAC validation on incoming platform events
bcryptPassword storageOne-way hashing; plaintext passwords never stored, logged, or transmitted; password recovery via time-limited single-use tokens
Cloudflare Turnstile CAPTCHARegistration and public formsApplied to registration and public-facing review submission to prevent bot abuse and credential stuffing

MFA Requirements

Multi-factor authentication is required for:

  • GitHub organization access
  • Azure portal access
  • MongoDB Atlas access

5. Session Management

  • API sessions are managed via JWT tokens, scoped per user and per workspace
  • A session authenticated to one workspace cannot access data from another workspace
  • Token expiration enforces automatic session termination. Sessions do not persist indefinitely.
  • Cross-tab session state is synchronized in the dashboard to reflect role and workspace changes promptly
  • On logout, the client discards the token; token revocation is handled via expiration

6. API Key and Token Management

Token TypeStorageRotation
JWT tokensClient-side (in memory or local storage)On re-authentication
OAuth access tokens (platform integrations)MongoDB Atlas (encrypted at rest)On re-authorization
Service credentials (DB passwords, API keys)GitHub encrypted secrets vault; injected as environment variablesOn suspected compromise or team member departure
Cloudflare API tokensGitHub encrypted secrets vaultPeriodic
No credentials, API keys, or secrets are ever committed to source code. All secrets are stored in GitHub's encrypted secrets vault and injected into containers as environment variables at runtime. Build logs do not contain credentials.

7. Production Access Controls

WiserReview's production environment is designed to minimize direct human access.

ControlImplementation
No SSH access to containersAzure App Services is a managed platform: no direct SSH access to production containers is possible
No direct production database access for developersMongoDB Atlas access restricted to Engineering Lead and Security Officer only
Deployments via CI/CD onlyAll production changes go through GitHub Actions: no manual file uploads or hotfixes applied directly to servers
MongoDB Atlas IP whitelistingDatabase clusters accept connections only from authorized Azure App Service IP ranges
Redis password authenticationRedis instances require password authentication; no public endpoint exposed
Azure Container RegistryDocker images stored with authenticated access only: no public image pulls
GitHub encrypted secrets vaultAll production credentials stored as encrypted secrets; accessible to GitHub Actions at runtime only
Azure portal MFAMulti-factor authentication required for Azure portal access

8. Periodic Access Reviews

Trigger-based reviews

Immediately upon any role change, departure, or contractor engagement ending

Periodic reviews

Access levels reviewed as part of ongoing security practice (being formalized into a scheduled cadence)

Review scope

GitHub organization access, Azure portal roles, MongoDB Atlas users, Cloudflare team members

Reviews are documented in internal records. The Engineering Lead conducts reviews; the Security Officer approves any access changes affecting production infrastructure.

9. Third-Party Access

  • Third-party integrations connect exclusively via OAuth 2.0: no shared credentials
  • External contractors or security consultants may be granted time-limited, scoped access to specific systems only, approved by the Security Officer
  • All third-party access is de-provisioned immediately upon engagement completion
  • No third party is granted unrestricted access to production customer data

10. Logging and Monitoring

Monitoring LayerImplementation
API request loggingAll API requests logged with timestamp, endpoint, response time, and outcome
Error trackingSentry captures all application errors with full context: timestamps, stack traces, user context
Latency monitoringResponse times monitored; requests exceeding 5s threshold trigger Slack alerts
Health checksDedicated health-check endpoints monitor database and cache connectivity continuously
Real-time alertsCritical errors and service anomalies trigger immediate Slack notifications
Cloudflare analyticsTraffic analytics, bot detection events, WAF rule triggers logged at the edge
Event tracking16+ event types tracked for usage patterns and anomaly detection

Logs are retained for 90 days. Access to log data is restricted to the Engineering Lead and Security Officer.

Access Control Inquiries

Tatvam Cloud Solutions, LLP

Email: [email protected]