-
Notifications
You must be signed in to change notification settings - Fork 15
Multi Tenancy Staff Access
Part of the Multi-tenancy section. Built β on
main. The company switcher and the per-analyst access control are live; cross-company audit logging is still to come.
Your analysts work across companies. This page covers how they move between clients, search across all of them, and how you control who can see what.
Analysts spend most of their time working in one company's context β picked from a company switcher in the header. While in that context, everything they see and do is scoped to that client.
They can also step up to an "All companies" view to search across every client at once β for those "I know I wrote that knowledge article, but which client was it for?" moments. Cross-company search results always carry a company badge so it's obvious which client each result belongs to.
The active company is shown loudly at all times. The dangerous mistake isn't failing to find something β it's replying to a ticket while in the wrong company's context. The interface makes the current company unmistakable to prevent exactly that. See Pitfalls.
Different MSPs run their teams differently, and FreeITSM accommodates all of them without an install-wide switch β because access is a property of your analysts and teams, not a global mode:
- Generalist desk ("everyone supports everyone") β give all analysts access to all companies.
- Account-aligned analyst ("Jo looks after Acme and Globex; Sam looks after Initech") β grant each analyst only their clients.
- Account-aligned team ("the Acme team handles Acme + Globex") β grant a team its clients and drop analysts into it; they inherit that access β one grant instead of ticking companies on every member.
You can mix all of these freely. Access is additive: an analyst can reach a company if their own grant or any of their teams allows it.
Each analyst's add/edit dialog has an "Access all companies" toggle. Leave it on for an all-access analyst; switch it off and a checklist appears to tick exactly which companies they may work in. New analysts default to all-access. The analyst list flags anyone restricted with a small "N companies" chip. (The control only appears once you have more than one company β a single-company install never sees it.)
This is the key that the isolation locks turn. Restricting an analyst takes effect everywhere at once: their company switcher only lists their companies, their ticket lists / search / dashboards scope to those, and any attempt to reach another client's ticket by id is denied. There is no install-wide mode β access is simply a property of your analysts and their teams.
On a multi-company install each team gets a Manage companies action: an "Access all companies" toggle, or a checklist of specific companies. Every analyst in the team inherits that access on top of whatever they're granted directly. Team grants default to nothing β a team (new or pre-existing) grants no company access until you set it β so enabling this never silently widens anyone's access on upgrade.
Because it's additive and funnels through the same choke-point (getAccessibleTenantIds() in includes/tenancy.php unions an analyst's own grants with their teams'), the System β Analysts screen shows each analyst's effective access β direct + inherited β and team-granted companies appear there read-only, with a pointer back to Teams. The team itself stays global: it isn't owned by a company, it just carries company grants.
Because stepping across companies is a sensitive action, cross-company views and changes are good candidates for an audit trail β planned as part of the rollout.
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π’ Ticket numbering
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ ποΈ The folder pane
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)