mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Change permission selection to checkboxes and make the space bigger #8852
Closed
opened 2025-12-29 20:42:06 +01:00 by adam
·
22 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
No Label
type: feature
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#8852
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @gdprdatasubect on GitHub (Nov 18, 2023).
NetBox version
v3.6.5
Feature type
Change to existing functionality
Proposed functionality
Currently the selection for permissions looks like this:

This does not seem like a good design choice (A lot of options crammed in a small field, ctrl required to add things to selection) and could IMHO better be handled with individual checkboxes and not using a selection-field in the first place, e.g.:
etc.
Use case
Improve admin-user-experience, not having to press control to add things to the selection, improving accessibility due to being able to use tab to switch to next field
Database changes
No response
External dependencies
No response
@jonasnieberle commented on GitHub (Dec 19, 2023):
I think it would be very useful if you implement this feature. I struggled the last 15 minutes to select 10 object types. You have to press the Strg key and then scroll down ... then you select the next one and all previous selected object types are deselected.
@DanSheps commented on GitHub (Dec 20, 2023):
Sorry, this is non-viable straight out of the gate. We have over 100 models within NetBox that can have permissions assigned to them. We cannot generate 100+ check boxes to allow for this.
Additionally, this also doesn't take into account permissions added by plugins.
@jsenecal commented on GitHub (Dec 20, 2023):
Maybe the help text could be more explicit and the widget made bigger, but the current way really is the only logical way.
@jonasnieberle commented on GitHub (Dec 20, 2023):
Ok, yeah you're right 100+ check boxes aren't good to handle. An what about the same method like the filter methods:
You can search for the object and can select it and then you see the selected object in the top line. And with the x you can remove the object from the selection. The same ui style is implemented by the user group assignment and the permissions.
So we also have the benefit that the same ui styles used 🤔
@jsenecal commented on GitHub (Dec 20, 2023):
What do you do when you get 90+ permissions selected ? Wouldnt that break UX ?
@abhi1693 commented on GitHub (Dec 20, 2023):
How about something similar to this?
@DanSheps commented on GitHub (Dec 20, 2023):
I think #13435 brings up using a dynamic selector (not clear about it from the description IMO though).
@gdprdatasubect commented on GitHub (Dec 20, 2023):
Well, to me the current workflow seems worse to handle than checkboxes, so that's why i suggested them.
Personally I think the whole permission workflow is counterintuitive and the ideal solution would be a Permission Constraint text field per available option, since filtering could be more fine grained and would involve creating less groups (or maybe i'm just using it wrongly)
@DanSheps commented on GitHub (Dec 20, 2023):
Try checking 100 checkboxes because you need to give every permission except for a few (compared to Ctrl-A then Ctrl-click on ones you don't need)
There is a permission constraint field, but not everyone can be bothered to learn JSON or they have simpler needs.
Additionally, not every model has every field so you typically have to create multiple permissions for permission constraints anyways.
@jeffgdotorg commented on GitHub (Dec 20, 2023):
Checkboxes feel untenable, but we could change this control to use a dynamic multi-select widget. That would make it work like the Content Types control from the existing Add Custom Link flow, giving type-to-filter and removing the need to hold down Ctrl / Strg.
@jeffgdotorg commented on GitHub (Dec 20, 2023):
Folding #13435 into this issue. The two are similar enough that we think a common approach (dynamic multi-select, see above) will do the trick for both.
@DanSheps commented on GitHub (Dec 21, 2023):
It might be a good idea to maybe make it a DynamicModelMultipleChoiceField and see if we can get a selector widget working with it (also make the selector widget work with multi-selection by allowing Ctrl+click to select multiple items).
There would be a little work involved if we wanted to go that route. We would likely need to make ContentType a proxy model of it's own.
@DanSheps commented on GitHub (Jan 9, 2024):
Did we ever decide on which field we should use for this? I am kind of coming around to @abhi1693's idea as any other could get rather messy with the amount of objects we have.
@github-actions[bot] commented on GitHub (May 15, 2024):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Do not attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see our contributing guide.
@jonasnieberle commented on GitHub (May 15, 2024):
How can we procceed with this topic? From my site the idea from @abhi1693 ist the best? The other fields can/will break the UI if you select 100+ permissions. Or maybe some other ideas from other software?
@jeremystretch commented on GitHub (May 15, 2024):
@JonasEinfach this issue needs a volunteer to implement it. Would you like to own it?
@jonasnieberle commented on GitHub (May 15, 2024):
@jeremystretch Im not familar with developing in netbox, but I can try :)
At first look, it looks like that's only a change in the forms of the permission object.
@jonasnieberle commented on GitHub (May 26, 2024):
Today I checked the forms.py for the ObjectPermission.
So that's the actual python code:
If Im right you limit the choice of form rendering with the constants OBJECTPERMISSION_OBJECT_TYPES?
In the form we use the ContentTypeMultipleChoiceField. I searched in the netbox github for all forms which use this form as well. For example I found that the CustomFieldForm also use this form.
103c08c2d2/netbox/extras/forms/model_forms.py (L42)The funny thing - in the custom field form we have definitely a better UI form to select / search / remove / see the content types.
But the ObjectPermission Form have the "not well to handle" Form :D
The widget attribute forms.SelectMultiple(attrs={'size': 6}) overwrite the default form ...
I commented the widget attribute and we have the better multiple select form.
The form can also handle >80 selected objects.
Tbh who use permissions with more than 80 content type objects? It's definitley smarter to use multiple permissions and assign them to a group ...
From my site the UI experience is definitely better without widget attribute forms.SelectMultiple(attrs={'size': 6})
What do you think? @jeremystretch @DanSheps
@PieterL75 commented on GitHub (Oct 21, 2024):
Cant his FR also include the list view of the user permissions ?

Its a pretty long page when all but some objects are selected
Maybe do the same as ip/vlans on interfaces, just display a nbr of there are more than 5
@itslychee commented on GitHub (Jan 29, 2025):
Hey was wondering if there was any update on this!
@DanSheps
Could you elaborate on this? How does adding another element to each item added to the list of entries and iterating over that to see if an entry is checked not viable? Genuinely just curious
I'd say the solution proposed by @jonasnieberle is probably the cleanest and best solution for this, but hoping there could be some feedback from a member.
thank you for netbox!
@Omripresent commented on GitHub (May 14, 2025):
Sorry I'm late to the game here with this comment but I've noticed over time when new object models are added we always have to explicitly add them to every relevant permission object.
Assuming you organize your permissions by the app, for example
dcim.roanddcim.rwand so on. You have to keep track on changes and modify those accordingly.It might be possible to approach the permissions in a hierarchical way by allowing the selection of all models under a certain app (dcim, ipam, core, etc) and automatically account for all related models.
For a more granular control open up the individual models for selection forgoing the app level auto select for that app.
This should allow for a more intuitive control and permission view in most use cases and still allow the fine grained controls of the current setup.
To @PieterL75's comment we should be getting a cleaner view here on the object type from:
To something like
@jeremystretch commented on GitHub (Jul 28, 2025):
Closing this in favor of the dual-column approach currently in use for table config and suggested above. Please see FR #19968.