Skip to content

Groups

Travomate Cargo provides default groups that are assigned to users upon signup. These groups define baseline permissions and visibility rules. Custom groups can be created at any time, and users can belong to multiple groups, which inherit permissions from their parent groups.

The tables below cover the default groups shipped with the platform. This list is extensible: admins can add new groups (see Custom Groups) without changing how the underlying system works.

Default Groups

Group Auto-Assigned To Inherits From Key Permissions Visibility Scope Notes
Cargo Owner Users who select "I want to post cargo" at signup Basic Group Create/read/update cargo listings, delete drafts, read capacity listings Own listings: full detail. Others' listings: public fields only Default group, cannot be removed
Capacity Provider Users who select "I want to offer shipping capacity" at signup Basic Group Create/read/update capacity listings, delete drafts, read cargo listings Own listings: full detail. Others' listings: public fields only Default group, cannot be removed
Verified Provider Assigned by admin after company verification Capacity Provider Everything Capacity Provider has, plus read analytics on own shipments and manage premium listings Adds access to the premium analytics dashboard and featured placements Displays a "Verified Freight Provider" badge on the public profile
Admin Created manually by platform staff (not self-signup) -- Full access to every query and mutation in the schema Full visibility of all fields, including hidden ones; can override any visibility rule Can manage groups, permissions, and moderate content

Two more groups sit underneath these but are never assigned to a user directly: they exist purely so shared permissions aren't duplicated across the marketplace-side groups:

Group Inherits From Contributes Notes
Basic Group Communications Nothing of its own Common parent of Cargo Owner and Capacity Provider; carries Communications into both
Communications -- Create and read conversations Messaging isn't specific to either side of the marketplace, so it lives here once

Admin capabilities also include: viewing all resources regardless of assignment, seeing fields marked private or hidden, modifying visibility rules, suspending or deleting resources, and viewing user data.

Custom Groups

Beyond the defaults above, admins can create custom groups for specific business needs. A few examples already in use:

Group Purpose Inherits From Key Differences
Premium Subscriber Adds paid analytics and AI-assisted search on top of a standard account Cargo Owner Adds premium analytics and advanced search with recommendations
Verified Shipper Adds real-time tracking for cargo owners with a verified business Cargo Owner Adds advanced shipment tracking with live GPS
Moderator Platform staff who review and act on flagged content -- Can read all listings, hide/unhide listings, moderate conversations, and read public user profiles; sees flagged conversations because this group is assigned to them, not through a separate visibility rule

These are examples, not the full set. New groups can be added at any time. See Permission Model Reference for how a group's permissions and visibility rules are actually defined.

Group Inheritance

Inheritance exists to avoid duplication. A group can inherit from a parent to reuse its permissions:

flowchart LR
    Communications["Communications<br/>(base)"]

    Communications --> CargoOwner["Cargo Owner"]
    Communications --> CapacityProvider["Capacity Provider"]

    CargoOwner --> PremiumSubscriber["Premium Subscriber"]
    CargoOwner --> VerifiedShipper["Verified Shipper"]

    CapacityProvider --> VerifiedProvider["Verified Provider"]

    Admin["Admin<br/>(standalone)"]

Most groups inherit from a parent to get base permissions (like messaging), then add their own. Inheritance is purely additive: a child group inherits everything from its parent and adds more.

Users are assigned multiple independent groups. A user might be assigned cargo_owner (at signup) and later premium_subscriber (after upgrade). They get the union of both groups' permissions. There's no "hierarchy" in terms of user membership, just multiple flat group assignments.

Multi-Group Assignment

Users can belong to multiple groups at once. Their effective permissions are the union of all permissions from those groups.

Example: a user assigned to both cargo_owner (at signup) and premium_subscriber (after upgrade):

Group Contributes
Cargo Owner Create/read/update cargo listings, read capacity listings
Premium Subscriber Advanced search, premium analytics (inherits cargo_owner too)
Union (effective) All of the above combined

There is no conflict. If either group allows an action or field, it's allowed.

Group Management

Assigning Users to Groups

An admin opens a user's profile in the admin panel, sees their current groups (the default group is always shown but can't be removed), and picks additional groups to assign or remove from the available list. The same operation is available as an API mutation taking a user ID and a group ID. See GraphQL Implementation for the exact call.

Creating Custom Groups

Custom groups are created with a name, an optional parent group to inherit from, and a list of permissions: the same operation described in Permission Model Reference.

Permission Evaluation Rules

  1. Permissions are purely additive - a user gets the union of all their group permissions
  2. Inheritance is additive - a child group has everything from its parent, plus more
  3. No conflicts - there are no deny rules; unlisted actions/fields are simply forbidden
  4. Admin always overrides - the Admin group bypasses all restrictions and sees everything

Default Startup Scenario

When a user signs up:

  1. They select a role: "I want to post cargo" or "I want to offer shipping capacity"
  2. The account is created with the matching default group (cargo_owner or capacity_provider)
  3. They can immediately create listings of that type, view listings of the other type, and create conversations with other parties
  4. Later, an admin can extend their access, e.g. assigning verified_shipper after email/company verification, or premium_subscriber if they upgrade

Summary Table

Group Auto-Assigned Create Listings Modify Listings Delete Listings View All Admin Access
Cargo Owner Cargo Draft only - -
Capacity Provider Capacity Draft only - -
Verified Provider - Capacity Draft only - -
Admin - Any ✓ All
Custom groups - Configured Configured Configured Configured -