> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Report permissions

> Who can view, build, share, schedule and export reports – plus the cost firewall that hides cost, revenue and margin from roles that may not see them.

Three separate checks decide what a report shows you: the seven report capabilities, the cost and rate firewall, and your supervision scope. All three must pass.

## The three checks

| Check          | Question it answers          | If it fails                                             |
| -------------- | ---------------------------- | ------------------------------------------------------- |
| **Capability** | May you do this at all?      | The control is absent, or the action is refused         |
| **Firewall**   | May you see this figure?     | The column is missing, or the cell reads **Restricted** |
| **Scope**      | Whose records may you count? | Rows are folded out, and a coverage note says so        |

Two people can open the very same shared report and read different numbers. That is correct behaviour, not a bug.

## The seven report capabilities

| Capability        | Lets you                                                |
| ----------------- | ------------------------------------------------------- |
| `report.view`     | Open the Reports page, open a report, and run it        |
| `report.create`   | Create a new report, and duplicate one                  |
| `report.edit`     | Change a report **you own**                             |
| `report.manage`   | Change or archive **any** report, including shared ones |
| `report.share`    | Publish a report to the whole workspace                 |
| `report.schedule` | Set up a recurring email of a report                    |
| `report.export`   | Download a report as CSV, Excel or PDF                  |

`report.manage` is a superset of `report.edit` – holding manage satisfies every edit check on its own.

### Editing rules

| Report                       | To edit or archive it you need                       |
| ---------------------------- | ---------------------------------------------------- |
| **Personal**, yours          | Ownership **and** `report.edit` (or `report.manage`) |
| **Personal**, someone else's | Not possible – you cannot even see it                |
| **Shared**                   | `report.manage`. Ownership is irrelevant.            |

<Note>
  Ownership alone is never enough on a personal report. And a shared report is workspace property, so its author does not keep unilateral rights over it.
</Note>

Archiving uses exactly the same rule as editing, because archiving is the destructive end of the same right.

## What each role holds by default

| Role                | view | create | edit | manage | share | schedule | export |
| ------------------- | ---- | ------ | ---- | ------ | ----- | -------- | ------ |
| **Owner**           | Yes  | Yes    | Yes  | Yes    | Yes   | Yes      | Yes    |
| **Admin**           | Yes  | Yes    | Yes  | Yes    | Yes   | Yes      | Yes    |
| **Project Manager** | Yes  | Yes    | Yes  | –      | –     | –        | –      |
| **Finance**         | –    | –      | –    | –      | –     | –        | –      |
| **Member**          | Yes  | Yes    | Yes  | –      | –     | –        | –      |
| **Contractor**      | –    | –      | –    | –      | –     | –        | –      |
| **Client**          | –    | –      | –    | –      | –     | –        | –      |

**Reports** does not appear in the sidebar for Finance, Contractor or Client, because none of them holds `report.view`.

The curation tier – manage, share, schedule and export – is Owner and Admin only out of the box. A workspace can move any of them onto a custom role. See [/team/custom-roles](/team/custom-roles).

<Note>
  Finance holds `data.export`, which is the workspace-wide bulk export, not report export. They are different rights. See [/data/export-your-data](/data/export-your-data).
</Note>

## The cost and rate firewall

This is the rule that matters most. **A report never shows cost, revenue or margin to someone whose role may not see them – no matter what the report asks for.**

The firewall is enforced on the server, on every path: the screen, the drill-down, the export, the print view and the scheduled email. There is no arrangement of a report, no share link, and no export format that gets around it.

### The gated figures

| Figure            | Needs                                      |
| ----------------- | ------------------------------------------ |
| Labor cost        | `time.viewCost`                            |
| Expense cost      | `time.viewCost`                            |
| Actual cost       | `time.viewCost`                            |
| Forecast margin   | `time.viewCost`                            |
| Billing rate      | `rate.viewBilling`                         |
| Revenue           | `rate.viewBilling`                         |
| Tracked value     | `rate.viewBilling`                         |
| **Profit**        | `time.viewCost` **and** `rate.viewBilling` |
| **Profit margin** | `time.viewCost` **and** `rate.viewBilling` |
| Invoiced          | `invoice.manage`                           |

Cost and billing are honoured independently. Someone who can see billing rates but not cost sees Revenue and not Labor cost. Someone with the reverse sees Labor cost and not Revenue.

### Why profit needs both

Profit is revenue minus cost. Someone who could see profit next to cost could subtract one from the other and reconstruct the revenue figure they were not allowed to see. Margin is the same problem in reverse – revenue is profit divided by margin.

Requiring both capabilities closes that gap. It is the one place two permissions are demanded together.

### What you actually see

| Situation                                                    | On screen                                                    |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| You cannot see the figure and the report does not ask for it | The column is not offered in the catalog and does not appear |
| The report explicitly asks for a figure you cannot see       | The cell shows a lock and reads **Restricted**               |
| Hovering that cell                                           | *"You don't have permission to view this value."*            |

<Warning>
  A restricted cell is not a blanked-out number waiting to be read. The value never leaves the server. It is not in the page, not in the export, and not in the scheduled email.
</Warning>

## Roster fields

**Group**, **Manager**, **Job title** and **Employment type** are gated on roster access. A role that cannot read the roster cannot group or filter by them either.

This stops a report becoming a side door onto roster information the team page already hides from that person.

## Source gates

Two sources need a capability beyond `report.view`:

| Source       | Needs                                                                                 |
| ------------ | ------------------------------------------------------------------------------------- |
| **Expenses** | `expense.approve` – workspace-wide expense visibility, not the self-only submit right |
| **Invoices** | `invoice.manage` – the same gate that opens the Invoices page                         |

The other six – Time entries, Projects, Tasks, Timesheets, Time off and Timecard – need only `report.view`. They still narrow which **rows** you see, based on your scope.

## Supervision scope

A capability says whether you **may**. Scope says **for whom**.

A manager with `time.viewOthers` still only sees the people their scope reaches. A report folds only over those people, so a total covers your reach, not the whole workspace.

When your scope is narrower than the roster, a note sits above the table:

> Covering **4 of 12** members – your role only sees the people you supervise.

The note only appears when it matters. If you see everybody, there is nothing to say.

<Warning>
  Read that note before pasting a total into a client email or an invoice. The number is correct for your reach – it is not the whole workspace.
</Warning>

See [/concepts/supervision-scope](/concepts/supervision-scope).

## Drill-down

Clicking a subtotal opens the records behind it, and the same three checks apply again:

* **Rows** – you see your own records plus those of people in your scope.
* **Fields** – billing and cost rates on each record only appear if you may see them.
* **Hidden records** – anything out of reach is counted, never shown: *"N more entries aren't shown because you don't have access to them."*

If none are visible: *"No entries you can view for this total."*

## Exports and schedules

| Path                  | Whose permissions build it                 |
| --------------------- | ------------------------------------------ |
| An export you request | Yours, at the moment you click             |
| A scheduled email     | The schedule creator's, every time it runs |

<Warning>
  A scheduled report is built under the creator's permissions and emailed to whoever is on the list. If the creator can see margin, the file everyone receives has margin in it. Check the recipient list before scheduling a money report.
</Warning>

A schedule also stops sending if its creator loses `report.view` – through a role change or leaving the workspace. Nothing is sent, and no error reaches the recipients.

`report.export` never implies cost access. Someone who can export but cannot see cost downloads a file with no cost columns.

## Example

Northwind Studio's shared **Unbilled work** report asks for Billable time, Uninvoiced time and Revenue.

| Person        | Role            | What they see                                                                                                                 |
| ------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Maya Ellis    | Owner           | Every column, every member, no coverage note                                                                                  |
| Tom Whitfield | Admin           | The same as Maya                                                                                                              |
| Priya Raman   | Project Manager | Billable time, Uninvoiced time and Revenue. She holds billing but not cost, so a Labor cost column would read **Restricted**. |
| Daniel Okafor | Finance         | Cannot open Reports at all – Finance holds no report capability                                                               |
| Sarah Lin     | Member          | Billable time and Uninvoiced time. Revenue is not there for her.                                                              |
| Ana Ferreira  | Contractor      | Cannot open Reports at all                                                                                                    |
| Ruth Castillo | Client          | Reports does not exist in the portal                                                                                          |

Sarah's totals also fold only over her own time, so her copy shows a coverage note.

## Changing what someone can do

<Steps>
  <Step title="Decide capability or scope">
    "They cannot open Reports" is a capability problem. "They see only some people" is a scope problem.
  </Step>

  <Step title="Open the role">
    Go to **Settings → Roles** and open the role.
  </Step>

  <Step title="Grant the capability">
    Tick the report capability you need, or the cost or billing capability.
  </Step>

  <Step title="Or set the scope">
    Change the role's supervision scope to widen who its holders can see.
  </Step>

  <Step title="Save">
    The change is live. Capabilities are checked fresh on every action.
  </Step>
</Steps>

<Warning>
  Granting `time.viewCost` or `rate.viewBilling` opens cost and revenue everywhere, not only in reports. Think about it as a business decision, not a reporting one. See [/rates/cost-rates](/rates/cost-rates).
</Warning>

## Plans

Permissions and plans are separate gates, and both must pass:

| Action                      | Capability                       | Plan    |
| --------------------------- | -------------------------------- | ------- |
| Open and run a report       | `report.view`                    | Free    |
| Save a new or edited report | `report.create` or `report.edit` | **Pro** |
| Export a file               | `report.export`                  | **Pro** |
| Schedule an email           | `report.schedule`                | **Pro** |

The **Reports** app itself is on every plan and never paywalled. See [/concepts/plans-and-features](/concepts/plans-and-features).

## Common questions

<AccordionGroup>
  <Accordion title="Can a report ever leak a number I am not allowed to see?">
    No. The firewall runs on the server on every path – screen, drill-down, export, print and scheduled email. A gated value never reaches your browser.
  </Accordion>

  <Accordion title="Why can Finance not open Reports?">
    Finance holds no report capability by default. It owns the money surface – invoices, payments and the bulk data export – not the reporting surface. Grant `report.view` on a custom role if you need it.
  </Accordion>

  <Accordion title="Why does my colleague's export have more columns?">
    Their role can see cost or billing figures that yours cannot. The file mirrors what each person may see.
  </Accordion>

  <Accordion title="I own this report – why can I not edit it?">
    Ownership alone is not enough. A personal report needs ownership plus `report.edit`. A shared report needs `report.manage` regardless of who made it.
  </Accordion>

  <Accordion title="Can I give someone export access without cost access?">
    Yes, and it is a good default. `report.export` never implies cost visibility – their file has no cost columns.
  </Accordion>

  <Accordion title="Does hiding a column change the totals?">
    No. Totals are calculated over the whole filtered set. A column you cannot see is not subtracted from anything; it is just not shown to you.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Symptom                                   | Cause                                             | Fix                                                  |
| ----------------------------------------- | ------------------------------------------------- | ---------------------------------------------------- |
| **Reports** is missing from the sidebar   | No `report.view`, or the Reports app is off       | Check the role, then Settings → Apps                 |
| **New report** is not shown               | No `report.create`                                | Ask an admin                                         |
| A report opens read-only                  | You cannot edit it – shared needs `report.manage` | Duplicate it instead                                 |
| A cell shows a lock and **Restricted**    | The figure is gated                               | Ask for `time.viewCost` or `rate.viewBilling`        |
| A total looks too small                   | Your scope covers part of the roster              | Read the coverage note above the table               |
| An expenses or invoices report is refused | You lack the source capability                    | Ask for `expense.approve` or `invoice.manage`        |
| Save fails with a permission message      | The server re-checks every write                  | Confirm you hold edit or manage rights               |
| A scheduled report stopped arriving       | The creator lost report access                    | Recreate the schedule under someone who still has it |

## Related guides

<CardGroup cols={2}>
  <Card title="Roles and capabilities" icon="user-shield" href="/concepts/roles-and-capabilities">
    The seven roles and every capability.
  </Card>

  <Card title="Supervision scope" icon="users" href="/concepts/supervision-scope">
    Which people your reports cover.
  </Card>

  <Card title="Cost rates" icon="dollar-sign" href="/rates/cost-rates">
    What cost visibility actually exposes.
  </Card>

  <Card title="Metrics reference" icon="list" href="/reports/metrics-reference">
    Which figures carry which gate.
  </Card>

  <Card title="Share a report" icon="share" href="/reports/share-a-report">
    Publishing without widening access.
  </Card>

  <Card title="Plans and features" icon="credit-card" href="/concepts/plans-and-features">
    What Free covers and what Pro adds.
  </Card>
</CardGroup>
