> ## 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.

# Work schedule permissions

> Who can see and edit work schedules: the schedule.view and schedule.manage capabilities, role defaults, supervision scope and app gating.

Two capabilities govern schedules.

| Capability        | What it unlocks                                                            |
| ----------------- | -------------------------------------------------------------------------- |
| `schedule.view`   | See your own schedule, and – with scope – other people's expected hours.   |
| `schedule.manage` | Create, edit, duplicate and delete schedules; assign them; add exceptions. |

## Role defaults

<Tabs>
  <Tab title="Can edit schedules">
    | Role  | `schedule.view` | `schedule.manage` |
    | ----- | --------------- | ----------------- |
    | Owner | Yes             | Yes               |
    | Admin | Yes             | Yes               |
  </Tab>

  <Tab title="Can only see them">
    | Role            | `schedule.view` | `schedule.manage` |
    | --------------- | --------------- | ----------------- |
    | Project Manager | Yes             | No                |
    | Finance         | Yes             | No                |
    | Member          | Yes             | No                |
    | Contractor      | Yes             | No                |
  </Tab>

  <Tab title="No access">
    | Role   | `schedule.view` | `schedule.manage` |
    | ------ | --------------- | ----------------- |
    | Client | No              | No                |
  </Tab>
</Tabs>

<Note>
  Project Manager is deliberately left out of `schedule.manage`. Contracted hours
  are a workspace-configuration decision, in the same tier as leave policies and
  workspace settings. You can grant it through a custom role – see
  [/team/custom-roles](/team/custom-roles).
</Note>

Client-portal contacts hold no internal capabilities at all, so schedules are
invisible to them. See
[/concepts/roles-and-capabilities](/concepts/roles-and-capabilities).

## Capability is not scope

Holding `schedule.view` says you **may** read a schedule. Supervision scope says
**whose** schedule you may read. Both have to pass.

* Your **own** schedule always needs `schedule.view`.
* Someone **else's** needs `schedule.manage` **or** `time.viewOthers`, plus the
  person being inside your supervision scope.

<Warning>
  `schedule.manage` does **not** bypass supervision scope. A scoped role that can
  edit schedule templates still only sees the expected hours of the people it
  supervises.
</Warning>

Read [/concepts/supervision-scope](/concepts/supervision-scope) for how scope is
set.

## Why a reviewer can see expected hours

A Project Manager reviewing a timesheet needs the expected hours that timesheet is
measured against. That is why `time.viewOthers` also unlocks reading someone
else's resolved schedule – without it, the timesheet's "expected" column would be
blank for the reviewer.

## What each surface requires

| Surface                                    | Needs                                                         |
| ------------------------------------------ | ------------------------------------------------------------- |
| **My Schedule** in the sidebar             | Work schedules app on, and `schedule.view`                    |
| **Settings → Schedules**                   | Work schedules app on, and `schedule.manage`                  |
| Member record → **Schedule** tab           | `schedule.manage`                                             |
| Expected hours on your own timesheet       | `schedule.view`                                               |
| Expected hours on someone else's timesheet | `time.viewOthers` plus scope                                  |
| Day-off shading in the Planner             | `schedule.view`; teammates' lanes also need `time.viewOthers` |

## App and plan gating

Work schedules is an app. It must be switched on in **Settings → Apps**.

| Gate    | State                | What you see                                                                     |
| ------- | -------------------- | -------------------------------------------------------------------------------- |
| App off | Hidden               | The route shows a switched-off card. Saved schedules are kept.                   |
| Plan    | Included on **Free** | No paywall. The app maps to the `timesheets` plan feature, which every plan has. |

Turning Work schedules off also disables **Time Clock**, which depends on it.
See [/concepts/apps-and-modules](/concepts/apps-and-modules) and
[/concepts/plans-and-features](/concepts/plans-and-features).

<Note>
  Hiding is a convenience, never the boundary. Every schedule write is re-checked
  on the server, so a stale browser tab cannot save into a switched-off app or
  past a missing capability.
</Note>

## Example

Northwind Studio:

* **Maya Ellis (Owner)** and **Tom Whitfield (Admin)** build and assign
  schedules.
* **Priya Raman (Project Manager)** cannot open Settings → Schedules. She can see
  expected hours for the people she supervises, because she holds
  `time.viewOthers`, which is what makes timesheet review work.
* **Sarah Lin (Member)** sees only **My Schedule**.
* **Ana Ferreira (Contractor)** sees only **My Schedule**.
* **Ruth Castillo (Client)** sees nothing – schedules are not part of the portal.

If Maya wants Priya to run schedules too, she creates a custom role based on
Project Manager and adds `schedule.manage`.

## Common questions

<AccordionGroup>
  <Accordion title="Can I let a manager edit only their own team's schedules?">
    Not per team. `schedule.manage` is workspace-wide. You can grant it through a
    custom role, but it lets that role edit any schedule.
  </Accordion>

  <Accordion title="Why can a Finance user see schedules?">
    Finance is a working role – its members clock in and see their own schedule.
    They hold `schedule.view` for themselves only, not `time.viewOthers`.
  </Accordion>

  <Accordion title="Can I take schedule.view away from one person?">
    Per-person permission overrides are deny-only and limited to a small set of
    actions. Check the person's record for what can be switched off. See
    /team/per-person-permissions.
  </Accordion>

  <Accordion title="Someone gets a Forbidden message. What is missing?">
    Either the capability or the scope. Confirm their role holds the capability,
    then confirm the person they are reading is inside their supervision scope.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                                  | Fix                                                                             |
| -------------------------------------------------------- | ------------------------------------------------------------------------------- |
| **Settings → Schedules** shows a no-access panel         | Grant `schedule.manage`, or use an Owner or Admin account.                      |
| **My Schedule** is missing from the sidebar              | Turn the Work schedules app on, or grant `schedule.view`.                       |
| A manager sees blank expected hours for their team       | They need `time.viewOthers` and the people must be in their scope.              |
| The whole schedules area is gone after a settings change | Someone switched the app off in Settings → Apps. Saved schedules are untouched. |

## Related guides

<CardGroup cols={2}>
  <Card title="Roles and capabilities" href="/concepts/roles-and-capabilities">
    The full capability model.
  </Card>

  <Card title="Supervision scope" href="/concepts/supervision-scope">
    Who each person may see.
  </Card>

  <Card title="Custom roles" href="/team/custom-roles">
    Grant `schedule.manage` to another role.
  </Card>

  <Card title="Apps and modules" href="/concepts/apps-and-modules">
    Switching Work schedules on and off.
  </Card>

  <Card title="Schedules overview" href="/schedules/overview">
    What schedules do.
  </Card>
</CardGroup>
