Roles and Access

Access Levels

Anonymous visitor

  • Can access public pages like home/login/register
  • Cannot access parcel workflows that require login

Authenticated user (public user)

  • Can access parcels list/map/search
  • Visibility limited to:
  • own parcels
  • parcels marked is_public=True
  • Can use list/map selection features

Internal user

A user with UserProfile.is_internal_user=True.

  • Has normal authenticated capabilities
  • Also allowed to open:
  • statistics dashboard (/parcels/analytics/)
  • reports page (/parcels/reports/)

Staff user

  • Can view/manage all visible parcels in the active dataset
  • Can use map edit mode and inline update features
  • Can access Django admin

Superuser

  • Full Django admin powers
  • Can use setup-groups utility (/auth/admin/setup-groups/)

Dataset-Aware Scope

Most parcel queries are constrained to the active dataset. This applies to list/map/search/selection/statistics/export/upload workflows.

Dataset Roles

Dataset access is controlled per dataset for users and groups with this hierarchy:

  • APPROVER (inherits reviewer/editor/viewer)
  • REVIEWER (inherits editor/viewer)
  • EDITOR (inherits viewer)
  • VIEWER

Effective role is the highest role from:

  • direct user grants
  • group grants through any group the user belongs to

Users without a grant for a dataset cannot access that dataset, even if they manipulate URLs or API requests.

Active Dataset Selector

  • Each authenticated user has UserProfile.active_dataset.
  • Selector options include only datasets where the user has at least VIEWER.
  • If the active dataset becomes invalid (revoked/inactive), middleware clears it and auto-selects the first accessible dataset (stable ordering) when possible.
  • If no datasets are accessible, dataset-scoped pages return empty/no-access behavior until access is granted.