Skip to content

Access Control Logic

Access is determined using UserActivePlan.

Rules:

  • A user has at most one active plan
  • Subscription overrides one-time plan
  • Expired subscriptions automatically lose access

Why this approach:

  • No repeated checks across views
  • Easy to change rules globally
  • Scales well as features grow

Access checks should always rely on UserActivePlan, not directly on Subscription or Order.