Merge "network_topology: check policy for UI elements"

This commit is contained in:
Zuul 2025-05-06 13:44:10 +00:00 committed by Gerrit Code Review
commit 60c4b2fd74
4 changed files with 18 additions and 2 deletions

View File

@ -22,6 +22,7 @@
[[/console]]
</div>
[[#type]]
[[#allow_delete]]
<div class="cell delete">
<button class="delete-device btn btn-danger btn-xs [[type]]"
data-type="[[type]]" data-device-id="[[id]]"
@ -29,6 +30,7 @@
[[delete_label]]
</button>
</div>
[[/allow_delete]]
[[/type]]
</div>
</div>

View File

@ -83,12 +83,13 @@ class NetworkTopologyTests(test.TestCase):
expect_server_urls = []
for server in self.servers.list():
expect_server = {
'id': server.id,
'name': server.name,
'status': server.status.title(),
'allow_delete_server': True,
'original_status': server.status,
'task': None,
'url': '/project/instances/%s/' % server.id
'id': server.id,
'url': '/project/instances/%s/' % server.id,
}
if server.status != 'BUILD' and with_console:
expect_server['console'] = 'auto_console'
@ -133,6 +134,7 @@ class NetworkTopologyTests(test.TestCase):
'router:external': net.is_router_external,
'status': net.status.title(),
'allow_delete_subnet': True,
'allow_delete_network': True,
'original_status': net.status,
'subnets': [{
'cidr': subnet.cidr,

View File

@ -233,9 +233,12 @@ class JSONView(View):
console_type = settings.CONSOLE_TYPE
# lowercase of the keys will be used at the end of the console URL.
for server in servers:
allow_delete_server = policy.check(
(("compute", "os_compute_api:servers:delete"),), request)
server_data = {'name': server.name,
'status': self.trans.instance[server.status],
'original_status': server.status,
'allow_delete_server': allow_delete_server,
'task': getattr(server, 'OS-EXT-STS:task_state'),
'id': server.id}
# Avoid doing extra calls for console if the server is in
@ -276,6 +279,12 @@ class JSONView(View):
target={'network:tenant_id': getattr(network,
'tenant_id', None)}
)
allow_delete_network = policy.check(
(("network", "delete_network"),),
request,
target={'network:tenant_id': getattr(network,
'tenant_id', None)}
)
obj = {'name': network.name_or_id,
'id': network.id,
'subnets': [{'id': subnet.id,
@ -283,6 +292,7 @@ class JSONView(View):
for subnet in network.subnets],
'status': self.trans.network[network.status],
'allow_delete_subnet': allow_delete_subnet,
'allow_delete_network': allow_delete_network,
'original_status': network.status,
'router:external': network['is_router_external']}
self.add_resource_url('horizon:project:networks:subnets:detail',

View File

@ -1056,6 +1056,7 @@ horizon.network_topology = {
htmlData.console_id = d.id;
htmlData.ips = d.ip_addresses;
htmlData.console = d.console;
htmlData.allow_delete = d.allow_delete_server;
html = balloonTmpl.render(htmlData,{
table1:deviceTmpl,
table2:instanceTmpl
@ -1067,6 +1068,7 @@ horizon.network_topology = {
htmlData.subnet = subnets;
if (d instanceof Network) {
htmlData.delete_label = gettext('Delete Network');
htmlData.allow_delete = d.allow_delete_network;
if (d.allow_delete_subnet){
htmlData.allow_delete_subnet = d.allow_delete_subnet;
}