Improve multitenancy support #1433

Closed
opened 2026-04-06 01:23:17 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @chaeynz on 8/19/2025

NetBox version

v4.3.6

Feature type

Change to existing functionality

Proposed functionality

Hi there! :3
We would like to use Netbox to give users access to their own silo of Netbox data.
The current way how Netbox addresses the concept of tenancy is not enough for that I believe and therefore I would like to suggest an improvement in how Netbox handles this.

Basically, when I create a tenant in Netbox, there is no clear way for me to assign a user to that tenant.
I would want to limit the user to be within the scope of this tenant, along with any objects that user creates.
Right now, when I use Netbox permissions to limit access rights to only objects from a specific Tenant, the user can still accidently create an object without a tenant assigned.

I would suggest the following:

  • Add field for the user object to assign a list of tenants to a user object (as a simpler way, basically a wrapper to the permissions, to give a user view rights to that tenant and prevent the user from viewing any objects outside that tenant) - basically a multiselect dropdown in the UI
  • Add field for user to specify a single tenant, every time the user creates an object, Netbox will check for the users "default_tenant" field and ensure the object has that tenant assigned

I would love to hear your input!

Use case

We want to be able to for example spin up demo environments for users, where they get their own silo of data in netbox and can use the automation that was configured beforehand.
In the slack I asked about something similar related to multitenancy before and it was suggested to just install multiple instances of netbox.
This is not an option though.

Database changes

New fields in the User model:

  • tenants
  • default_tenant

External dependencies

No response

*Originally created by @chaeynz on 8/19/2025* ### NetBox version v4.3.6 ### Feature type Change to existing functionality ### Proposed functionality Hi there! :3 We would like to use Netbox to give users access to their own silo of Netbox data. The current way how Netbox addresses the concept of tenancy is not enough for that I believe and therefore I would like to suggest an improvement in how Netbox handles this. Basically, when I create a tenant in Netbox, there is no clear way for me to assign a user to that tenant. I would want to limit the user to be within the scope of this tenant, along with any objects that user creates. Right now, when I use Netbox permissions to limit access rights to only objects from a specific Tenant, the user can still accidently create an object without a tenant assigned. I would suggest the following: - Add field for the user object to assign a list of tenants to a user object (as a simpler way, basically a wrapper to the permissions, to give a user view rights to that tenant and prevent the user from viewing any objects outside that tenant) - basically a multiselect dropdown in the UI - Add field for user to specify a single tenant, every time the user creates an object, Netbox will check for the users "default_tenant" field and ensure the object has that tenant assigned I would love to hear your input! ### Use case We want to be able to for example spin up demo environments for users, where they get their own silo of data in netbox and can use the automation that was configured beforehand. In the slack I asked about something similar related to multitenancy before and it was suggested to just install multiple instances of netbox. This is not an option though. ### Database changes New fields in the User model: - tenants - default_tenant ### External dependencies _No response_
MrUnknownDE added the type: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: featuretype: feature labels 2026-04-06 01:24:15 +02:00
Sign in to join this conversation.
No Label type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature type: feature
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/netbox#1433