Uhpenry
Booth

Atomic Permissions

Guide to setting up roles and permissions for booth members.

Uhpenry secures booth collaboration with an atomic, function-based permission model: every flag represents exactly one capability (a page you may see, a tab you may open, a button you may press, or an endpoint you may call). Roles are simply named bundles of these flags, and you can add or remove flags at the booth level without inventing new role types. This keeps privileges minimal, makes audits precise, and lets features evolve by adding a single, well-named permission.

Unlike coarse role systems, page access is distinct from action permissions being allowed to create a project does not imply you can view the Members page. Enforcement happens in two places: the client gates the UI for good UX, while the server performs authoritative checks on every request and wins on any conflict. The system defaults to fail-closed, returning 404 where you want to hide resource existence and 403 where a locked experience is acceptable.

Quick summary

  • Every permission is atomic (single purpose) and function-based, e.g., PROJECT_CREATE or MEMBER_INVITE.
  • Page access is separate from action permissions: having permission to create a user does not imply you can view the members page.
  • Enforcement happens both client-side (UI gating) and server-side (authoritative checks). Server wins on conflicts.
  • The model is flexible: developers can create unlimited custom rules and map them to roles or users at booth-level granularity.
  • No per-seat billing: permissions and membership scale without forcing per-seat pricing.

The Value of Atomic Permissions

Our permission model is intentionally designed at the atomic level. Instead of bundling access into broad roles, each action can be granted (or withheld) individually. This approach ensures:

  • Flexibility: Adapt permissions precisely to your team's unique workflows.
  • Extensibility: Add new features without overhauling the entire access system; just define one new permission.
  • Least Privilege: Give users only the access they need, reducing risk.
  • Auditability: Maintain a fine-grained history of who changed what, and when.

Atomic permissions aren't just a detail, they are the foundation that makes the system adaptable, secure, and future-proof.

Permission Tables

Page permissions control access to different sections of the Uhpenry platform.
These are mostly view-level permissions that grant entry to dashboards, detail pages, and navigation tabs.

PermissionDescription
PAGE_OVERVIEWAccess the main overview dashboard of the platform.
PAGE_APPLICATIONSView and manage the list of applications.
PAGE_SUPPORTAccess the support page for booth-related inquiries.
PAGE_SUPPORT_DETAILView a detailed page of an individual support thread.
PAGE_PROJECTSView the list of all projects.
PAGE_PROJECT_DETAILView a detailed page of an individual project.
PAGE_MANAGEAccess the booth management page.
PAGE_SnapgateView the Snapgate disputes page.
PAGE_Snapgate_DETAILView details of a specific Snapgate dispute.
PAGE_MEMBERSAccess the members management page.

Actions

Actions represent specific operations users can perform.
They are grouped by functionality for easier mapping.


Platform Actions

PermissionDescription
PLATFORM_REPORTSView and manage reports made against booths or users.
PLATFORM_SUPPORTSHandle incoming support requests related to the platform.
PLATFORM_DISPUTESView and manage disputes raised within the platform.
PLATFORM_RESOLUTIONSAccess the resolutions management page.
PLATFORM_RESOLVEResolve disputes by issuing official resolutions.
PLATFORM_DISPUTE_PARTICIPANTAdd or remove participants in a dispute case.

Booth Actions

PermissionDescription
BOOTH_DELETEDelete an existing booth.
BOOTH_EDITEdit booth information.
BOOTH_UPDATEUpdate booth details.
BOOTH_PUBLISHPublish a booth to make it public.
BOOTH_GITHUBManage GitHub integration for a booth.
BOOTH_STRIPEManage Stripe payment integration for a booth.

Project Actions

PermissionDescription
PROJECT_CREATECreate a new project.
PROJECT_DELETEDelete an existing project.
PROJECT_EDITEdit an existing project's details.
PROJECT_PUBLISHPublish a project to make it public.
PROJECT_UPDATEUpdate an existing project's information.

Project Presets

PermissionDescription
PRESET_CREATECreate a new project preset.
PRESET_EDITEdit an existing project preset.
PRESET_UPDATEUpdate details for an existing project preset.
PRESET_IMPORTImport a project preset from another source.
PRESET_PUBLISHPublish a project preset for public use.

Disputes & Resolutions

PermissionDescription
Snapgate_MODERATIONModerate Snapgate dispute cases.
REFUNDSApprove or deny refund requests.

Members Actions

PermissionDescription
MEMBER_INFOView a member's information.
MEMBER_REMOVERemove a team member from the booth or project.
INVITE_REVOKERevoke a single pending member invitation.
MEMBER_ADDAdd a new team member using their username.
ROLE_EDITEdit the role of an existing team member.
MEMBER_UNSUSPENDRestore access for a suspended member.
DEMOTE_ALL_ADMINSRemove admin privileges from all admins.
MEMBER_INVITEInvite a new team member via email.
ROLE_CUSTOMCreate or edit custom member roles.
MEMBERS_REMOVE_ALLRemove all team members at once.
INVITES_REVOKE_ALLRevoke all pending member invitations.
UNSUSPEND_ALL_ACCESSRestore access for all members.
MEMBER_SUSPENDSuspend access for a specific team member.
SUSPEND_ALL_ACCESSSuspend access for all members.

Member Navigation

PermissionDescription
TAB_MEMBERSView the Members tab in team management.
TAB_AUDIT_LOGView the Audit Logs tab.
TAB_INVITATIONView the Invitations tab.
TAB_ROLESView and manage the Roles tab.
TAB_DANGER_ZONEAccess the Danger Zone tab for destructive actions.
AUDIT_CLEARClear all audit logs.
IP_STATE_MANAGEManage IP address restrictions and allowlists.

Integrations

PermissionDescription
BOOTH_GITHUBManage GitHub integration for a booth.
BOOTH_STRIPEManage Stripe payment integration for a booth.

Storage

PermissionDescription
STORAGE_MANAGEManage project, booth, and team storage allocations.

Exports

PermissionDescription
EXPORT_PROJECTExport project-related data.
EXPORT_TEAMExport team-related data.
EXPORT_BOOTHExport booth-related data.

Summary

  • Pages = entry access (dashboards, detail views, tabs).
  • Actions = do something (create, update, delete, resolve, invite, publish, etc.).
  • Permissions are atomic no bundles, each stands alone.

So when you join or create a booth on Uhpenry, Atomic Permissions are what make sure everyone has just the right level of access. Instead of one-size-fits-all roles, every action in a booth whether it's viewing a project, inviting new members, publishing a booth, or handling support is controlled by a specific, named permission.

That means:

  • Owners (the ones who created the booth) always have full control. They decide who can do what inside the booth.
  • Admins can be trusted with wide access, like managing members or updating projects, but without the risk of accidentally removing the booth itself.
  • Members can focus on collaboration building, contributing, and accessing the pages they need without unnecessary distractions or risks.
  • Support roles can step in to help with disputes, refunds, or moderation, without being able to touch projects or sensitive booth settings.

The benefit to you is simple: you get the workflow you're already used to, just more secure and clearer. If you were part of a team before coming to Uhpenry, you'll find it easy to rebuild the same structure here. Owners can customize roles, assign responsibilities, and fine-tune access so your booth works exactly the way you want it to.

In short: Atomic Permissions put you in control. You don't have to worry about giving away too much access or blocking people unnecessarily. Every permission is intentional, every role is flexible, and every member knows what they can (and can't) do. This keeps booths safe, organized, and aligned with how you want to collaborate.