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

Improved enforcement of view permissions for home page

Jeremy Stretch 6 лет назад
Родитель
Сommit
30da4594cd
1 измененных файлов с 177 добавлено и 107 удалено
  1. 177 107
      netbox/templates/home.html

+ 177 - 107
netbox/templates/home.html

@@ -10,20 +10,26 @@
                 <strong>Organization</strong>
             </div>
             <div class="list-group">
-                {% if perms.dcim.view_site %}
-                    <div class="list-group-item">
+                <div class="list-group-item">
+                    {% if perms.dcim.view_site %}
                         <span class="badge pull-right">{{ stats.site_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'dcim:site_list' %}">Sites</a></h4>
-                        <p class="list-group-item-text text-muted">Geographic locations</p>
-                    </div>
-                {% endif %}
-                {% if perms.tenancy.view_tenant %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Sites</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Geographic locations</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.tenancy.view_tenant %}
                         <span class="badge pull-right">{{ stats.tenant_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'tenancy:tenant_list' %}">Tenants</a></h4>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Tenants</h4>
+                    {% endif %}
                         <p class="list-group-item-text text-muted">Customers or departments</p>
                     </div>
-                {% endif %}
             </div>
         </div>
         <div class="panel panel-default">
@@ -31,37 +37,55 @@
                 <strong>DCIM</strong>
             </div>
             <div class="list-group">
-                {% if perms.dcim.view_rack %}
-                    <div class="list-group-item">
+                <div class="list-group-item">
+                    {% if perms.dcim.view_rack %}
                         <span class="badge pull-right">{{ stats.rack_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'dcim:rack_list' %}">Racks</a></h4>
-                        <p class="list-group-item-text text-muted">Equipment racks, optionally organized by group</p>
-                    </div>
-                {% endif %}
-                {% if perms.dcim.view_device %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Racks</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Equipment racks, optionally organized by group</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.dcim.view_device %}
                         <span class="badge pull-right">{{ stats.device_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'dcim:device_list' %}">Devices</a></h4>
-                        <p class="list-group-item-text text-muted">Rack-mounted network equipment, servers, and other devices</p>
-                    </div>
-                {% endif %}
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Devices</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Rack-mounted network equipment, servers, and other devices</p>
+                </div>
                 <div class="list-group-item">
                     <h4 class="list-group-item-heading">Connections</h4>
                     {% if perms.dcim.view_cable %}
                         <span class="badge pull-right">{{ stats.cable_count }}</span>
                         <p style="padding-left: 20px;"><a href="{% url 'dcim:cable_list' %}">Cables</a></p>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <p style="padding-left: 20px;">Cables</p>
                     {% endif %}
                     {% if perms.dcim.view_interface %}
                         <span class="badge pull-right">{{ stats.interface_connections_count }}</span>
                         <p style="padding-left: 20px;"><a href="{% url 'dcim:interface_connections_list' %}">Interfaces</a></p>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <p style="padding-left: 20px;">Interfaces</p>
                     {% endif %}
                     {% if perms.dcim.view_consoleport and perms.dcim.view_consoleserverport %}
                         <span class="badge pull-right">{{ stats.console_connections_count }}</span>
                         <p style="padding-left: 20px;"><a href="{% url 'dcim:console_connections_list' %}">Console</a></p>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <p style="padding-left: 20px;">Console</p>
                     {% endif %}
                     {% if perms.dcim.view_powerport and perms.dcim.view_poweroutlet %}
                         <span class="badge pull-right">{{ stats.power_connections_count }}</span>
                         <p class="list-group-item-text" style="padding-left: 20px;"><a href="{% url 'dcim:power_connections_list' %}">Power</a></p>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <p style="padding-left: 20px;">Power</p>
                     {% endif %}
                 </div>
             </div>
@@ -71,20 +95,26 @@
                 <strong>Virtualization</strong>
             </div>
             <div class="list-group">
-                {% if perms.virtualization.view_cluster %}
-                    <div class="list-group-item">
+                <div class="list-group-item">
+                    {% if perms.virtualization.view_cluster %}
                         <span class="badge pull-right">{{ stats.cluster_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'virtualization:cluster_list' %}">Clusters</a></h4>
-                        <p class="list-group-item-text text-muted">Clusters of physical hosts in which VMs reside</p>
-                    </div>
-                {% endif %}
-                {% if perms.virtualization.view_virtualmachine %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Clusters</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Clusters of physical hosts in which VMs reside</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.virtualization.view_virtualmachine %}
                         <span class="badge pull-right">{{ stats.virtualmachine_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'virtualization:virtualmachine_list' %}">Virtual Machines</a></h4>
-                        <p class="list-group-item-text text-muted">Virtual compute instances running inside clusters</p>
-                    </div>
-                {% endif %}
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Virtual Machines</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Virtual compute instances running inside clusters</p>
+                </div>
             </div>
         </div>
     </div>
@@ -94,41 +124,56 @@
                 <strong>IPAM</strong>
             </div>
             <div class="list-group">
-                {% if perms.ipam.view_vrf %}
-                    <div class="list-group-item">
+                <div class="list-group-item">
+                    {% if perms.ipam.view_vrf %}
                         <span class="badge pull-right">{{ stats.vrf_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'ipam:vrf_list' %}">VRFs</a></h4>
-                        <p class="list-group-item-text text-muted">Virtual routing and forwarding tables</p>
-                    </div>
-                {% endif %}
-                {% if perms.ipam.view_aggregate %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">VRFs</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Virtual routing and forwarding tables</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.ipam.view_aggregate %}
                         <span class="badge pull-right">{{ stats.aggregate_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'ipam:aggregate_list' %}">Aggregates</a></h4>
-                        <p class="list-group-item-text text-muted">Top-level IP allocations</p>
-                    </div>
-                {% endif %}
-                {% if perms.ipam.view_prefix %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Aggregates</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Top-level IP allocations</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.ipam.view_prefix %}
                         <span class="badge pull-right">{{ stats.prefix_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'ipam:prefix_list' %}">Prefixes</a></h4>
-                        <p class="list-group-item-text text-muted">IPv4 and IPv6 network assignments</p>
-                    </div>
-                {% endif %}
-                {% if perms.ipam.view_ipaddress %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Prefixes</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">IPv4 and IPv6 network assignments</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.ipam.view_ipaddress %}
                         <span class="badge pull-right">{{ stats.ipaddress_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'ipam:ipaddress_list' %}">IP Addresses</a></h4>
-                        <p class="list-group-item-text text-muted">Individual IPv4 and IPv6 addresses</p>
-                    </div>
-                {% endif %}
-                {% if perms.ipam.view_vlan %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">IP Addresses</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Individual IPv4 and IPv6 addresses</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.ipam.view_vlan %}
                         <span class="badge pull-right">{{ stats.vlan_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'ipam:vlan_list' %}">VLANs</a></h4>
-                        <p class="list-group-item-text text-muted">Layer two domains, identified by VLAN ID</p>
-                    </div>
-                {% endif %}
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">VLANs</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Layer two domains, identified by VLAN ID</p>
+                </div>
             </div>
         </div>
         <div class="panel panel-default">
@@ -136,64 +181,75 @@
                 <strong>Circuits</strong>
             </div>
             <div class="list-group">
-                {% if perms.circuits.view_provider %}
-                    <div class="list-group-item">
+                <div class="list-group-item">
+                    {% if perms.circuits.view_provider %}
                         <span class="badge pull-right">{{ stats.provider_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'circuits:provider_list' %}">Providers</a></h4>
-                        <p class="list-group-item-text text-muted">Organizations which provide circuit connectivity</p>
-                    </div>
-                {% endif %}
-                {% if perms.circuits.view_circuit %}
-                    <div class="list-group-item">
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Providers</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Organizations which provide circuit connectivity</p>
+                </div>
+                <div class="list-group-item">
+                    {% if perms.circuits.view_circuit %}
                         <span class="badge pull-right">{{ stats.circuit_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'circuits:circuit_list' %}">Circuits</a></h4>
-                        <p class="list-group-item-text text-muted">Communication links for Internet transit, peering, and other services</p>
-                    </div>
-                {% endif %}
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Circuits</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Communication links for Internet transit, peering, and other services</p>
+                </div>
             </div>
         </div>
-        {% if perms.secrets %}
-            <div class="panel panel-default">
-                <div class="panel-heading">
-                    <strong>Secrets</strong>
-                </div>
-                <div class="list-group">
-                    <div class="list-group-item">
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <strong>Secrets</strong>
+            </div>
+            <div class="list-group">
+                <div class="list-group-item">
+                    {% if perms.secrets.view_secret %}
                         <span class="badge pull-right">{{ stats.secret_count }}</span>
                         <h4 class="list-group-item-heading"><a href="{% url 'secrets:secret_list' %}">Secrets</a></h4>
-                        <p class="list-group-item-text text-muted">Sensitive data (such as passwords) which has been stored securely</p>
-                    </div>
+                    {% else %}
+                        <span class="badge pull-right"><i class="fa fa-lock"></i></span>
+                        <h4 class="list-group-item-heading">Secrets</h4>
+                    {% endif %}
+                    <p class="list-group-item-text text-muted">Sensitive data (such as passwords) which has been stored securely</p>
                 </div>
             </div>
-        {% endif %}
+        </div>
     </div>
     <div class="col-sm-6 col-md-4">
-        {% if perms.extras.view_topologymap %}
-            <div class="panel panel-default">
-                <div class="panel-heading">
-                    <strong>Global Topology Maps</strong>
-                </div>
-                {% if topology_maps %}
-                    <table class="table table-hover panel-body">
-                        {% for tm in topology_maps %}
-                            <tr>
-                                <td><i class="fa fa-fw fa-map-o"></i> <a href="{% url 'extras-api:topologymap-render' pk=tm.pk %}" target="_blank">{{ tm }}</a></td>
-                                <td>{{ tm.description }}</td>
-                            </tr>
-                        {% endfor %}
-                    </table>
-                {% else %}
-                    <div class="panel-body text-muted">
-                        None
-                    </div>
-                {% endif %}
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <strong>Global Topology Maps</strong>
             </div>
-        {% endif %}
-        {% if report_results and perms.extras.view_reportresult %}
-            <div class="panel panel-default">
-                <div class="panel-heading">
-                    <strong>Reports</strong>
+            {% if topology_maps and perms.extras.view_topologymap %}
+                <table class="table table-hover panel-body">
+                    {% for tm in topology_maps %}
+                        <tr>
+                            <td><i class="fa fa-fw fa-map-o"></i> <a href="{% url 'extras-api:topologymap-render' pk=tm.pk %}" target="_blank">{{ tm }}</a></td>
+                            <td>{{ tm.description }}</td>
+                        </tr>
+                    {% endfor %}
+                </table>
+            {% elif perms.extras.view_topologymap %}
+                <div class="panel-body text-muted">
+                    None found
                 </div>
+            {% else %}
+                <div class="panel-body text-muted">
+                    <i class="fa fa-lock"></i> No permission
+                </div>
+            {% endif %}
+        </div>
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <strong>Reports</strong>
+            </div>
+            {% if report_results and perms.extras.view_reportresult %}
                 <table class="table table-hover panel-body">
                     {% for result in report_results %}
                         <tr>
@@ -202,13 +258,21 @@
                         </tr>
                     {% endfor %}
                 </table>
-            </div>
-        {% endif %}
-        {% if perms.extras.view_objectchange %}
-            <div class="panel panel-default">
-                <div class="panel-heading">
-                    <strong>Changelog</strong>
+            {% elif perms.extras.view_reportresult %}
+                <div class="panel-body text-muted">
+                    None found
+                </div>
+            {% else %}
+                <div class="panel-body text-muted">
+                    <i class="fa fa-lock"></i> No permission
                 </div>
+            {% endif %}
+        </div>
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                <strong>Changelog</strong>
+            </div>
+            {% if changelog and perms.extras.view_objectchange %}
                 <div class="list-group">
                     {% for change in changelog %}
                         {% with action=change.get_action_display|lower %}
@@ -238,12 +302,18 @@
                                 <a href="{% url 'extras:objectchange_list' %}">View All Changes</a>
                             </div>
                         {% endif %}
-                    {% empty %}
-                        <div class="list-group-item text-muted">No change history found</div>
                     {% endfor %}
                 </div>
-            </div>
-        {% endif %}
+            {% elif perms.extras.view_objectchange %}
+                <div class="panel-body text-muted">
+                    No change history found
+                </div>
+            {% else %}
+                <div class="panel-body text-muted">
+                    <i class="fa fa-lock"></i> No permission
+                </div>
+            {% endif %}
+        </div>
     </div>
 </div>
 {% endblock %}