Просмотр исходного кода

Fixes #7092: Fix missing object permissions on Prefix IP Addresses view

thatmattlove 4 лет назад
Родитель
Сommit
b95e8350d2
3 измененных файлов с 36 добавлено и 21 удалено
  1. 1 0
      docs/release-notes/version-3.0.md
  2. 8 0
      netbox/ipam/views.py
  3. 27 21
      netbox/templates/utilities/obj_table.html

+ 1 - 0
docs/release-notes/version-3.0.md

@@ -15,6 +15,7 @@
 * [#7089](https://github.com/netbox-community/netbox/issues/7089) - Fix ContentTypeFilterSet not filtering on q filter
 * [#7089](https://github.com/netbox-community/netbox/issues/7089) - Fix ContentTypeFilterSet not filtering on q filter
 * [#7090](https://github.com/netbox-community/netbox/issues/7090) - Fix Cable Bulk Edit Form - allow decimal input on Length field
 * [#7090](https://github.com/netbox-community/netbox/issues/7090) - Fix Cable Bulk Edit Form - allow decimal input on Length field
 * [#7091](https://github.com/netbox-community/netbox/issues/7091) - Ensure API requests from the UI are aware of `BASE_PATH`
 * [#7091](https://github.com/netbox-community/netbox/issues/7091) - Ensure API requests from the UI are aware of `BASE_PATH`
+* [#7092](https://github.com/netbox-community/netbox/issues/7092) - Fix missing bulk edit buttons on Prefix IP Addresses table
 * [#7093](https://github.com/netbox-community/netbox/issues/7093) - Multi-select custom field filters should employ exact match
 * [#7093](https://github.com/netbox-community/netbox/issues/7093) - Multi-select custom field filters should employ exact match
 * [#7096](https://github.com/netbox-community/netbox/issues/7096) - Home links should honor `BASE_PATH` configuration
 * [#7096](https://github.com/netbox-community/netbox/issues/7096) - Home links should honor `BASE_PATH` configuration
 * [#7101](https://github.com/netbox-community/netbox/issues/7101) - Enforce `MAX_PAGE_SIZE` for table and REST API pagination
 * [#7101](https://github.com/netbox-community/netbox/issues/7101) - Enforce `MAX_PAGE_SIZE` for table and REST API pagination

+ 8 - 0
netbox/ipam/views.py

@@ -455,8 +455,16 @@ class PrefixIPAddressesView(generic.ObjectView):
 
 
         bulk_querystring = 'vrf_id={}&parent={}'.format(instance.vrf.pk if instance.vrf else '0', instance.prefix)
         bulk_querystring = 'vrf_id={}&parent={}'.format(instance.vrf.pk if instance.vrf else '0', instance.prefix)
 
 
+        # Compile permissions list for rendering the object table
+        permissions = {
+            'add': request.user.has_perm('ipam.add_ipaddress'),
+            'change': request.user.has_perm('ipam.change_ipaddress'),
+            'delete': request.user.has_perm('ipam.delete_ipaddress'),
+        }
+
         return {
         return {
             'table': table,
             'table': table,
+            'permissions': permissions,
             'bulk_querystring': bulk_querystring,
             'bulk_querystring': bulk_querystring,
             'active_tab': 'ip-addresses',
             'active_tab': 'ip-addresses',
             'first_available_ip': instance.get_first_available_ip(),
             'first_available_ip': instance.get_first_available_ip(),

+ 27 - 21
netbox/templates/utilities/obj_table.html

@@ -1,40 +1,44 @@
 {% load helpers %}
 {% load helpers %}
+
 {% if permissions.change or permissions.delete %}
 {% if permissions.change or permissions.delete %}
     <form method="post" class="form form-horizontal">
     <form method="post" class="form form-horizontal">
         {% csrf_token %}
         {% csrf_token %}
         <input type="hidden" name="return_url" value="{% if return_url %}{{ return_url }}{% else %}{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}{% endif %}" />
         <input type="hidden" name="return_url" value="{% if return_url %}{{ return_url }}{% else %}{{ request.path }}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}{% endif %}" />
+
         {% if table.paginator.num_pages > 1 %}
         {% if table.paginator.num_pages > 1 %}
             <div id="select-all-box" class="d-none card noprint">
             <div id="select-all-box" class="d-none card noprint">
-                <div class="card-body">
-                    <div class="float-end">
-                        {% if bulk_edit_url and permissions.change %}
-                            <button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if bulk_querystring %}?{{ bulk_querystring }}{% elif request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm" disabled="disabled">
-                                <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit All
-                            </button>
-                        {% endif %}
-                        {% if bulk_delete_url and permissions.delete %}
-                            <button type="submit" name="_delete" formaction="{% url bulk_delete_url %}{% if bulk_querystring %}?{{ bulk_querystring }}{% elif request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-danger btn-sm" disabled="disabled">
-                                <span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete All
-                            </button>
-                        {% endif %}
-                    </div>
-                    <div class="form-check">
-                      <input type="checkbox" id="select-all" name="_all" class="form-check-input" />
-                      <label for="select-all" class="form-check-label">
-                        Select <strong>all {{ table.rows|length }} {{ table.data.verbose_name_plural }}</strong> matching query
-                      </label>
-                    </div>
+                <div class="float-end">
+                    {% if bulk_edit_url and permissions.change %}
+                        <button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if bulk_querystring %}?{{ bulk_querystring }}{% elif request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm" disabled="disabled">
+                            <span class="mdi mdi-pencil" aria-hidden="true"></span> Edit All
+                        </button>
+                    {% endif %}
+                    {% if bulk_delete_url and permissions.delete %}
+                        <button type="submit" name="_delete" formaction="{% url bulk_delete_url %}{% if bulk_querystring %}?{{ bulk_querystring }}{% elif request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-danger btn-sm" disabled="disabled">
+                            <span class="mdi mdi-trash-can-outline" aria-hidden="true"></span> Delete All
+                        </button>
+                    {% endif %}
+                </div>
+                <div class="form-check">
+                    <input type="checkbox" id="select-all" name="_all" class="form-check-input" />
+                    <label for="select-all" class="form-check-label">
+                    Select <strong>all {{ table.rows|length }} {{ table.data.verbose_name_plural }}</strong> matching query
+                    </label>
                 </div>
                 </div>
             </div>
             </div>
         {% endif %}
         {% endif %}
+
         {% include table_template|default:'inc/responsive_table.html' %}
         {% include table_template|default:'inc/responsive_table.html' %}
+
         <div class="float-start noprint">
         <div class="float-start noprint">
             {% block extra_actions %}{% endblock %}
             {% block extra_actions %}{% endblock %}
+
             {% if bulk_edit_url and permissions.change %}
             {% if bulk_edit_url and permissions.change %}
                 <button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm">
                 <button type="submit" name="_edit" formaction="{% url bulk_edit_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-warning btn-sm">
                     <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit Selected
                     <i class="mdi mdi-pencil" aria-hidden="true"></i> Edit Selected
                 </button>
                 </button>
             {% endif %}
             {% endif %}
+
             {% if bulk_delete_url and permissions.delete %}
             {% if bulk_delete_url and permissions.delete %}
                 <button type="submit" name="_delete" formaction="{% url bulk_delete_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-danger btn-sm">
                 <button type="submit" name="_delete" formaction="{% url bulk_delete_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" class="btn btn-danger btn-sm">
                     <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete Selected
                     <i class="mdi mdi-trash-can-outline" aria-hidden="true"></i> Delete Selected
@@ -43,7 +47,9 @@
         </div>
         </div>
     </form>
     </form>
 {% else %}
 {% else %}
+
     {% include table_template|default:'inc/responsive_table.html' %}
     {% include table_template|default:'inc/responsive_table.html' %}
+
 {% endif %}
 {% endif %}
-    {% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}
-<div class="clearfix"></div>
+
+{% include 'inc/paginator.html' with paginator=table.paginator page=table.page %}