Commit 2ec11b2af1dc3c7538536bcd6996e2c6f9af9ee1
1 parent
15f4a85d
Display edge related entities on customer level
Showing
12 changed files
with
345 additions
and
179 deletions
@@ -415,7 +415,7 @@ public class AssetController extends BaseController { | @@ -415,7 +415,7 @@ public class AssetController extends BaseController { | ||
415 | } | 415 | } |
416 | } | 416 | } |
417 | 417 | ||
418 | - @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") | 418 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
419 | @RequestMapping(value = "/edge/{edgeId}/assets", params = {"limit"}, method = RequestMethod.GET) | 419 | @RequestMapping(value = "/edge/{edgeId}/assets", params = {"limit"}, method = RequestMethod.GET) |
420 | @ResponseBody | 420 | @ResponseBody |
421 | public TimePageData<Asset> getEdgeAssets( | 421 | public TimePageData<Asset> getEdgeAssets( |
@@ -431,7 +431,16 @@ public class AssetController extends BaseController { | @@ -431,7 +431,16 @@ public class AssetController extends BaseController { | ||
431 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); | 431 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); |
432 | checkEdgeId(edgeId, Operation.READ); | 432 | checkEdgeId(edgeId, Operation.READ); |
433 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); | 433 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); |
434 | - return checkNotNull(assetService.findAssetsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get()); | 434 | + TimePageData<Asset> nonFilteredResult = assetService.findAssetsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get(); |
435 | + List<Asset> filteredAssets = nonFilteredResult.getData().stream().filter(asset -> { | ||
436 | + try { | ||
437 | + accessControlService.checkPermission(getCurrentUser(), Resource.ASSET, Operation.READ, asset.getId(), asset); | ||
438 | + return true; | ||
439 | + } catch (ThingsboardException e) { | ||
440 | + return false; | ||
441 | + } | ||
442 | + }).collect(Collectors.toList()); | ||
443 | + return checkNotNull(new TimePageData<>(filteredAssets, nonFilteredResult.getNextPageLink(), nonFilteredResult.hasNext())); | ||
435 | } catch (Exception e) { | 444 | } catch (Exception e) { |
436 | throw handleException(e); | 445 | throw handleException(e); |
437 | } | 446 | } |
@@ -50,6 +50,7 @@ import org.thingsboard.server.service.security.permission.Resource; | @@ -50,6 +50,7 @@ import org.thingsboard.server.service.security.permission.Resource; | ||
50 | import java.util.HashSet; | 50 | import java.util.HashSet; |
51 | import java.util.List; | 51 | import java.util.List; |
52 | import java.util.Set; | 52 | import java.util.Set; |
53 | +import java.util.stream.Collectors; | ||
53 | 54 | ||
54 | @RestController | 55 | @RestController |
55 | @TbCoreComponent | 56 | @TbCoreComponent |
@@ -554,7 +555,7 @@ public class DashboardController extends BaseController { | @@ -554,7 +555,7 @@ public class DashboardController extends BaseController { | ||
554 | } | 555 | } |
555 | } | 556 | } |
556 | 557 | ||
557 | - @PreAuthorize("hasAuthority('TENANT_ADMIN')") | 558 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
558 | @RequestMapping(value = "/edge/{edgeId}/dashboards", params = { "limit" }, method = RequestMethod.GET) | 559 | @RequestMapping(value = "/edge/{edgeId}/dashboards", params = { "limit" }, method = RequestMethod.GET) |
559 | @ResponseBody | 560 | @ResponseBody |
560 | public TimePageData<DashboardInfo> getEdgeDashboards( | 561 | public TimePageData<DashboardInfo> getEdgeDashboards( |
@@ -570,7 +571,16 @@ public class DashboardController extends BaseController { | @@ -570,7 +571,16 @@ public class DashboardController extends BaseController { | ||
570 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); | 571 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); |
571 | checkEdgeId(edgeId, Operation.READ); | 572 | checkEdgeId(edgeId, Operation.READ); |
572 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); | 573 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); |
573 | - return checkNotNull(dashboardService.findDashboardsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get()); | 574 | + TimePageData<DashboardInfo> nonFilteredResult = dashboardService.findDashboardsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get(); |
575 | + List<DashboardInfo> filteredDashboards = nonFilteredResult.getData().stream().filter(dashboard -> { | ||
576 | + try { | ||
577 | + accessControlService.checkPermission(getCurrentUser(), Resource.DASHBOARD, Operation.READ, dashboard.getId(), dashboard); | ||
578 | + return true; | ||
579 | + } catch (ThingsboardException e) { | ||
580 | + return false; | ||
581 | + } | ||
582 | + }).collect(Collectors.toList()); | ||
583 | + return checkNotNull(new TimePageData<>(filteredDashboards, nonFilteredResult.getNextPageLink(), nonFilteredResult.hasNext())); | ||
574 | } catch (Exception e) { | 584 | } catch (Exception e) { |
575 | throw handleException(e); | 585 | throw handleException(e); |
576 | } | 586 | } |
@@ -631,7 +631,7 @@ public class DeviceController extends BaseController { | @@ -631,7 +631,7 @@ public class DeviceController extends BaseController { | ||
631 | } | 631 | } |
632 | } | 632 | } |
633 | 633 | ||
634 | - @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") | 634 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
635 | @RequestMapping(value = "/edge/{edgeId}/devices", params = {"limit"}, method = RequestMethod.GET) | 635 | @RequestMapping(value = "/edge/{edgeId}/devices", params = {"limit"}, method = RequestMethod.GET) |
636 | @ResponseBody | 636 | @ResponseBody |
637 | public TimePageData<Device> getEdgeDevices( | 637 | public TimePageData<Device> getEdgeDevices( |
@@ -647,7 +647,16 @@ public class DeviceController extends BaseController { | @@ -647,7 +647,16 @@ public class DeviceController extends BaseController { | ||
647 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); | 647 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); |
648 | checkEdgeId(edgeId, Operation.READ); | 648 | checkEdgeId(edgeId, Operation.READ); |
649 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); | 649 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); |
650 | - return checkNotNull(deviceService.findDevicesByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get()); | 650 | + TimePageData<Device> nonFilteredResult = deviceService.findDevicesByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get(); |
651 | + List<Device> filteredDevices = nonFilteredResult.getData().stream().filter(device -> { | ||
652 | + try { | ||
653 | + accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, Operation.READ, device.getId(), device); | ||
654 | + return true; | ||
655 | + } catch (ThingsboardException e) { | ||
656 | + return false; | ||
657 | + } | ||
658 | + }).collect(Collectors.toList()); | ||
659 | + return checkNotNull(new TimePageData<>(filteredDevices, nonFilteredResult.getNextPageLink(), nonFilteredResult.hasNext())); | ||
651 | } catch (Exception e) { | 660 | } catch (Exception e) { |
652 | throw handleException(e); | 661 | throw handleException(e); |
653 | } | 662 | } |
@@ -162,9 +162,9 @@ public class EdgeController extends BaseController { | @@ -162,9 +162,9 @@ public class EdgeController extends BaseController { | ||
162 | @RequestMapping(value = "/edges", params = {"limit"}, method = RequestMethod.GET) | 162 | @RequestMapping(value = "/edges", params = {"limit"}, method = RequestMethod.GET) |
163 | @ResponseBody | 163 | @ResponseBody |
164 | public TextPageData<Edge> getEdges(@RequestParam int limit, | 164 | public TextPageData<Edge> getEdges(@RequestParam int limit, |
165 | - @RequestParam(required = false) String textSearch, | ||
166 | - @RequestParam(required = false) String idOffset, | ||
167 | - @RequestParam(required = false) String textOffset) throws ThingsboardException { | 165 | + @RequestParam(required = false) String textSearch, |
166 | + @RequestParam(required = false) String idOffset, | ||
167 | + @RequestParam(required = false) String textOffset) throws ThingsboardException { | ||
168 | try { | 168 | try { |
169 | TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset); | 169 | TextPageLink pageLink = createPageLink(limit, textSearch, idOffset, textOffset); |
170 | TenantId tenantId = getCurrentUser().getTenantId(); | 170 | TenantId tenantId = getCurrentUser().getTenantId(); |
@@ -449,7 +449,7 @@ public class EntityViewController extends BaseController { | @@ -449,7 +449,7 @@ public class EntityViewController extends BaseController { | ||
449 | } | 449 | } |
450 | } | 450 | } |
451 | 451 | ||
452 | - @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") | 452 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
453 | @RequestMapping(value = "/edge/{edgeId}/entityViews", params = {"limit"}, method = RequestMethod.GET) | 453 | @RequestMapping(value = "/edge/{edgeId}/entityViews", params = {"limit"}, method = RequestMethod.GET) |
454 | @ResponseBody | 454 | @ResponseBody |
455 | public TimePageData<EntityView> getEdgeEntityViews( | 455 | public TimePageData<EntityView> getEdgeEntityViews( |
@@ -465,7 +465,16 @@ public class EntityViewController extends BaseController { | @@ -465,7 +465,16 @@ public class EntityViewController extends BaseController { | ||
465 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); | 465 | EdgeId edgeId = new EdgeId(toUUID(strEdgeId)); |
466 | checkEdgeId(edgeId, Operation.READ); | 466 | checkEdgeId(edgeId, Operation.READ); |
467 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); | 467 | TimePageLink pageLink = createPageLink(limit, startTime, endTime, ascOrder, offset); |
468 | - return checkNotNull(entityViewService.findEntityViewsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get()); | 468 | + TimePageData<EntityView> nonFilteredResult = entityViewService.findEntityViewsByTenantIdAndEdgeId(tenantId, edgeId, pageLink).get(); |
469 | + List<EntityView> filteredEntityViews = nonFilteredResult.getData().stream().filter(entityView -> { | ||
470 | + try { | ||
471 | + accessControlService.checkPermission(getCurrentUser(), Resource.ENTITY_VIEW, Operation.READ, entityView.getId(), entityView); | ||
472 | + return true; | ||
473 | + } catch (ThingsboardException e) { | ||
474 | + return false; | ||
475 | + } | ||
476 | + }).collect(Collectors.toList()); | ||
477 | + return checkNotNull(new TimePageData<>(filteredEntityViews, nonFilteredResult.getNextPageLink(), nonFilteredResult.hasNext())); | ||
469 | } catch (Exception e) { | 478 | } catch (Exception e) { |
470 | throw handleException(e); | 479 | throw handleException(e); |
471 | } | 480 | } |
@@ -142,7 +142,11 @@ export function AssetController($rootScope, userService, assetService, customerS | @@ -142,7 +142,11 @@ export function AssetController($rootScope, userService, assetService, customerS | ||
142 | var user = userService.getCurrentUser(); | 142 | var user = userService.getCurrentUser(); |
143 | 143 | ||
144 | if (user.authority === 'CUSTOMER_USER') { | 144 | if (user.authority === 'CUSTOMER_USER') { |
145 | - vm.assetsScope = 'customer_user'; | 145 | + if (vm.assetsScope === 'edge') { |
146 | + vm.assetsScope = 'edge_customer_user'; | ||
147 | + } else { | ||
148 | + vm.assetsScope = 'customer_user'; | ||
149 | + } | ||
146 | customerId = user.customerId; | 150 | customerId = user.customerId; |
147 | } | 151 | } |
148 | if (customerId) { | 152 | if (customerId) { |
@@ -323,51 +327,64 @@ export function AssetController($rootScope, userService, assetService, customerS | @@ -323,51 +327,64 @@ export function AssetController($rootScope, userService, assetService, customerS | ||
323 | } | 327 | } |
324 | vm.assetGridConfig.addItemActions = []; | 328 | vm.assetGridConfig.addItemActions = []; |
325 | 329 | ||
326 | - } else if (vm.assetsScope === 'edge') { | 330 | + } else if (vm.assetsScope === 'edge' || vm.assetsScope === 'edge_customer_user') { |
327 | fetchAssetsFunction = function (pageLink) { | 331 | fetchAssetsFunction = function (pageLink) { |
328 | return assetService.getEdgeAssets(edgeId, pageLink, null); | 332 | return assetService.getEdgeAssets(edgeId, pageLink, null); |
329 | }; | 333 | }; |
330 | - deleteAssetFunction = function (assetId) { | ||
331 | - return assetService.unassignAssetFromEdge(edgeId, assetId); | ||
332 | - }; | ||
333 | - refreshAssetsParamsFunction = function () { | ||
334 | - return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
335 | - }; | 334 | + if (vm.assetsScope === 'edge') { |
335 | + deleteAssetFunction = function (assetId) { | ||
336 | + return assetService.unassignAssetFromEdge(edgeId, assetId); | ||
337 | + }; | ||
338 | + refreshAssetsParamsFunction = function () { | ||
339 | + return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
340 | + }; | ||
336 | 341 | ||
337 | - assetActionsList.push( | ||
338 | - { | ||
339 | - onAction: function ($event, item) { | ||
340 | - unassignFromEdge($event, item, false); | ||
341 | - }, | ||
342 | - name: function() { return $translate.instant('action.unassign') }, | ||
343 | - details: function() { return $translate.instant('edge.unassign-from-edge') }, | ||
344 | - icon: "assignment_return" | ||
345 | - } | ||
346 | - ); | 342 | + assetActionsList.push( |
343 | + { | ||
344 | + onAction: function ($event, item) { | ||
345 | + unassignFromEdge($event, item, false); | ||
346 | + }, | ||
347 | + name: function () { | ||
348 | + return $translate.instant('action.unassign') | ||
349 | + }, | ||
350 | + details: function () { | ||
351 | + return $translate.instant('edge.unassign-from-edge') | ||
352 | + }, | ||
353 | + icon: "assignment_return" | ||
354 | + } | ||
355 | + ); | ||
347 | 356 | ||
348 | - assetGroupActionsList.push( | ||
349 | - { | ||
350 | - onAction: function ($event, items) { | ||
351 | - unassignAssetsFromEdge($event, items); | 357 | + assetGroupActionsList.push( |
358 | + { | ||
359 | + onAction: function ($event, items) { | ||
360 | + unassignAssetsFromEdge($event, items); | ||
361 | + }, | ||
362 | + name: function () { | ||
363 | + return $translate.instant('asset.unassign-assets') | ||
364 | + }, | ||
365 | + details: function (selectedCount) { | ||
366 | + return $translate.instant('asset.unassign-assets-from-edge-action-title', {count: selectedCount}, "messageformat"); | ||
367 | + }, | ||
368 | + icon: "assignment_return" | ||
369 | + } | ||
370 | + ); | ||
371 | + | ||
372 | + vm.assetGridConfig.addItemAction = { | ||
373 | + onAction: function ($event) { | ||
374 | + addAssetsToEdge($event); | ||
352 | }, | 375 | }, |
353 | - name: function() { return $translate.instant('asset.unassign-assets') }, | ||
354 | - details: function(selectedCount) { | ||
355 | - return $translate.instant('asset.unassign-assets-from-edge-action-title', {count: selectedCount}, "messageformat"); | 376 | + name: function () { |
377 | + return $translate.instant('asset.assign-assets') | ||
356 | }, | 378 | }, |
357 | - icon: "assignment_return" | ||
358 | - } | ||
359 | - ); | ||
360 | - | ||
361 | - vm.assetGridConfig.addItemAction = { | ||
362 | - onAction: function ($event) { | ||
363 | - addAssetsToEdge($event); | ||
364 | - }, | ||
365 | - name: function() { return $translate.instant('asset.assign-assets') }, | ||
366 | - details: function() { return $translate.instant('asset.assign-new-asset') }, | ||
367 | - icon: "add" | ||
368 | - }; | 379 | + details: function () { |
380 | + return $translate.instant('asset.assign-new-asset') | ||
381 | + }, | ||
382 | + icon: "add" | ||
383 | + }; | ||
384 | + } else if (vm.assetsScope === 'edge_customer_user') { | ||
385 | + vm.assetGridConfig.addItemAction = {}; | ||
386 | + } | ||
369 | vm.assetGridConfig.addItemActions = []; | 387 | vm.assetGridConfig.addItemActions = []; |
370 | - | ||
371 | } | 388 | } |
372 | 389 | ||
373 | vm.assetGridConfig.refreshParamsFunc = refreshAssetsParamsFunction; | 390 | vm.assetGridConfig.refreshParamsFunc = refreshAssetsParamsFunction; |
@@ -141,7 +141,11 @@ export function DashboardsController(userService, dashboardService, customerServ | @@ -141,7 +141,11 @@ export function DashboardsController(userService, dashboardService, customerServ | ||
141 | var user = userService.getCurrentUser(); | 141 | var user = userService.getCurrentUser(); |
142 | 142 | ||
143 | if (user.authority === 'CUSTOMER_USER') { | 143 | if (user.authority === 'CUSTOMER_USER') { |
144 | - vm.dashboardsScope = 'customer_user'; | 144 | + if (vm.dashboardsScope === 'edge') { |
145 | + vm.dashboardsScope = 'edge_customer_user'; | ||
146 | + } else { | ||
147 | + vm.dashboardsScope = 'customer_user'; | ||
148 | + } | ||
145 | customerId = user.customerId; | 149 | customerId = user.customerId; |
146 | } | 150 | } |
147 | 151 | ||
@@ -381,60 +385,80 @@ export function DashboardsController(userService, dashboardService, customerServ | @@ -381,60 +385,80 @@ export function DashboardsController(userService, dashboardService, customerServ | ||
381 | } else if (vm.dashboardsScope === 'customer_user') { | 385 | } else if (vm.dashboardsScope === 'customer_user') { |
382 | vm.dashboardGridConfig.addItemAction = {}; | 386 | vm.dashboardGridConfig.addItemAction = {}; |
383 | } | 387 | } |
384 | - } else if (vm.dashboardsScope === 'edge') { | 388 | + } else if (vm.dashboardsScope === 'edge' || vm.dashboardsScope === 'edge_customer_user') { |
385 | fetchDashboardsFunction = function (pageLink) { | 389 | fetchDashboardsFunction = function (pageLink) { |
386 | return dashboardService.getEdgeDashboards(edgeId, pageLink, null); | 390 | return dashboardService.getEdgeDashboards(edgeId, pageLink, null); |
387 | }; | 391 | }; |
388 | - deleteDashboardFunction = function (dashboardId) { | ||
389 | - return dashboardService.unassignDashboardFromEdge(edgeId, dashboardId); | ||
390 | - }; | ||
391 | - refreshDashboardsParamsFunction = function () { | ||
392 | - return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
393 | - }; | ||
394 | 392 | ||
395 | - dashboardActionsList.push( | ||
396 | - { | ||
397 | - onAction: function ($event, item) { | ||
398 | - exportDashboard($event, item); | ||
399 | - }, | ||
400 | - name: function() { $translate.instant('action.export') }, | ||
401 | - details: function() { return $translate.instant('dashboard.export') }, | ||
402 | - icon: "file_download" | ||
403 | - } | ||
404 | - ); | 393 | + if (vm.dashboardsScope === 'edge') { |
394 | + deleteDashboardFunction = function (dashboardId) { | ||
395 | + return dashboardService.unassignDashboardFromEdge(edgeId, dashboardId); | ||
396 | + }; | ||
397 | + refreshDashboardsParamsFunction = function () { | ||
398 | + return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
399 | + }; | ||
405 | 400 | ||
406 | - dashboardActionsList.push( | ||
407 | - { | ||
408 | - onAction: function ($event, item) { | ||
409 | - unassignFromEdge($event, item, edgeId); | ||
410 | - }, | ||
411 | - name: function() { return $translate.instant('action.unassign') }, | ||
412 | - details: function() { return $translate.instant('edge.unassign-from-edge') }, | ||
413 | - icon: "assignment_return" | ||
414 | - } | ||
415 | - ); | 401 | + dashboardActionsList.push( |
402 | + { | ||
403 | + onAction: function ($event, item) { | ||
404 | + exportDashboard($event, item); | ||
405 | + }, | ||
406 | + name: function () { | ||
407 | + $translate.instant('action.export') | ||
408 | + }, | ||
409 | + details: function () { | ||
410 | + return $translate.instant('dashboard.export') | ||
411 | + }, | ||
412 | + icon: "file_download" | ||
413 | + } | ||
414 | + ); | ||
416 | 415 | ||
417 | - dashboardGroupActionsList.push( | ||
418 | - { | ||
419 | - onAction: function ($event, items) { | ||
420 | - unassignDashboardsFromEdge($event, items, edgeId); | 416 | + dashboardActionsList.push( |
417 | + { | ||
418 | + onAction: function ($event, item) { | ||
419 | + unassignFromEdge($event, item, edgeId); | ||
420 | + }, | ||
421 | + name: function () { | ||
422 | + return $translate.instant('action.unassign') | ||
423 | + }, | ||
424 | + details: function () { | ||
425 | + return $translate.instant('edge.unassign-from-edge') | ||
426 | + }, | ||
427 | + icon: "assignment_return" | ||
428 | + } | ||
429 | + ); | ||
430 | + | ||
431 | + dashboardGroupActionsList.push( | ||
432 | + { | ||
433 | + onAction: function ($event, items) { | ||
434 | + unassignDashboardsFromEdge($event, items, edgeId); | ||
435 | + }, | ||
436 | + name: function () { | ||
437 | + return $translate.instant('dashboard.unassign-dashboards') | ||
438 | + }, | ||
439 | + details: function (selectedCount) { | ||
440 | + return $translate.instant('dashboard.unassign-dashboards-from-edge-action-title', {count: selectedCount}, "messageformat"); | ||
441 | + }, | ||
442 | + icon: "assignment_return" | ||
443 | + } | ||
444 | + ); | ||
445 | + | ||
446 | + vm.dashboardGridConfig.addItemAction = { | ||
447 | + onAction: function ($event) { | ||
448 | + addDashboardsToEdge($event); | ||
421 | }, | 449 | }, |
422 | - name: function() { return $translate.instant('dashboard.unassign-dashboards') }, | ||
423 | - details: function(selectedCount) { | ||
424 | - return $translate.instant('dashboard.unassign-dashboards-from-edge-action-title', {count: selectedCount}, "messageformat"); | 450 | + name: function () { |
451 | + return $translate.instant('dashboard.assign-dashboards') | ||
425 | }, | 452 | }, |
426 | - icon: "assignment_return" | ||
427 | - } | ||
428 | - ); | ||
429 | - | ||
430 | - vm.dashboardGridConfig.addItemAction = { | ||
431 | - onAction: function ($event) { | ||
432 | - addDashboardsToEdge($event); | ||
433 | - }, | ||
434 | - name: function() { return $translate.instant('dashboard.assign-dashboards') }, | ||
435 | - details: function() { return $translate.instant('dashboard.assign-new-dashboard') }, | ||
436 | - icon: "add" | ||
437 | - }; | 453 | + details: function () { |
454 | + return $translate.instant('dashboard.assign-new-dashboard') | ||
455 | + }, | ||
456 | + icon: "add" | ||
457 | + }; | ||
458 | + } else if (vm.dashboardsScope === 'edge_customer_user') { | ||
459 | + vm.dashboardGridConfig.addItemAction = {}; | ||
460 | + vm.dashboardGridConfig.addItemActions = []; | ||
461 | + } | ||
438 | } | 462 | } |
439 | 463 | ||
440 | vm.dashboardGridConfig.refreshParamsFunc = refreshDashboardsParamsFunction; | 464 | vm.dashboardGridConfig.refreshParamsFunc = refreshDashboardsParamsFunction; |
@@ -143,7 +143,11 @@ export function DeviceController($rootScope, userService, deviceService, custome | @@ -143,7 +143,11 @@ export function DeviceController($rootScope, userService, deviceService, custome | ||
143 | var user = userService.getCurrentUser(); | 143 | var user = userService.getCurrentUser(); |
144 | 144 | ||
145 | if (user.authority === 'CUSTOMER_USER') { | 145 | if (user.authority === 'CUSTOMER_USER') { |
146 | - vm.devicesScope = 'customer_user'; | 146 | + if (vm.devicesScope === 'edge') { |
147 | + vm.devicesScope = 'edge_customer_user'; | ||
148 | + } else { | ||
149 | + vm.devicesScope = 'customer_user'; | ||
150 | + } | ||
147 | customerId = user.customerId; | 151 | customerId = user.customerId; |
148 | } | 152 | } |
149 | if (customerId) { | 153 | if (customerId) { |
@@ -356,49 +360,64 @@ export function DeviceController($rootScope, userService, deviceService, custome | @@ -356,49 +360,64 @@ export function DeviceController($rootScope, userService, deviceService, custome | ||
356 | } | 360 | } |
357 | vm.deviceGridConfig.addItemActions = []; | 361 | vm.deviceGridConfig.addItemActions = []; |
358 | 362 | ||
359 | - } else if (vm.devicesScope === 'edge') { | 363 | + } else if (vm.devicesScope === 'edge' || vm.devicesScope === 'edge_customer_user') { |
360 | fetchDevicesFunction = function (pageLink) { | 364 | fetchDevicesFunction = function (pageLink) { |
361 | return deviceService.getEdgeDevices(edgeId, pageLink, null); | 365 | return deviceService.getEdgeDevices(edgeId, pageLink, null); |
362 | }; | 366 | }; |
363 | - deleteDeviceFunction = function (deviceId) { | ||
364 | - return deviceService.unassignDeviceFromEdge(edgeId, deviceId); | ||
365 | - }; | ||
366 | - refreshDevicesParamsFunction = function () { | ||
367 | - return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
368 | - }; | ||
369 | 367 | ||
370 | - deviceActionsList.push( | ||
371 | - { | ||
372 | - onAction: function ($event, item) { | ||
373 | - unassignFromEdge($event, item, false); | ||
374 | - }, | ||
375 | - name: function() { return $translate.instant('action.unassign') }, | ||
376 | - details: function() { return $translate.instant('edge.unassign-from-edge') }, | ||
377 | - icon: "assignment_return" | ||
378 | - } | ||
379 | - ); | 368 | + if (vm.devicesScope === 'edge') { |
369 | + deleteDeviceFunction = function (deviceId) { | ||
370 | + return deviceService.unassignDeviceFromEdge(edgeId, deviceId); | ||
371 | + }; | ||
372 | + refreshDevicesParamsFunction = function () { | ||
373 | + return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
374 | + }; | ||
380 | 375 | ||
381 | - deviceGroupActionsList.push( | ||
382 | - { | ||
383 | - onAction: function ($event, items) { | ||
384 | - unassignDevicesFromEdge($event, items); | ||
385 | - }, | ||
386 | - name: function() { return $translate.instant('device.unassign-devices') }, | ||
387 | - details: function(selectedCount) { | ||
388 | - return $translate.instant('device.unassign-devices-from-edge-action-title', {count: selectedCount}, "messageformat"); | ||
389 | - }, | ||
390 | - icon: "assignment_return" | ||
391 | - } | ||
392 | - ); | 376 | + deviceActionsList.push( |
377 | + { | ||
378 | + onAction: function ($event, item) { | ||
379 | + unassignFromEdge($event, item, false); | ||
380 | + }, | ||
381 | + name: function() { return $translate.instant('action.unassign') }, | ||
382 | + details: function() { return $translate.instant('edge.unassign-from-edge') }, | ||
383 | + icon: "assignment_return" | ||
384 | + } | ||
385 | + ); | ||
393 | 386 | ||
394 | - vm.deviceGridConfig.addItemAction = { | ||
395 | - onAction: function ($event) { | ||
396 | - addDevicesToEdge($event); | ||
397 | - }, | ||
398 | - name: function() { return $translate.instant('device.assign-devices') }, | ||
399 | - details: function() { return $translate.instant('device.assign-new-device') }, | ||
400 | - icon: "add" | ||
401 | - }; | 387 | + deviceGroupActionsList.push( |
388 | + { | ||
389 | + onAction: function ($event, items) { | ||
390 | + unassignDevicesFromEdge($event, items); | ||
391 | + }, | ||
392 | + name: function() { return $translate.instant('device.unassign-devices') }, | ||
393 | + details: function(selectedCount) { | ||
394 | + return $translate.instant('device.unassign-devices-from-edge-action-title', {count: selectedCount}, "messageformat"); | ||
395 | + }, | ||
396 | + icon: "assignment_return" | ||
397 | + } | ||
398 | + ); | ||
399 | + | ||
400 | + vm.deviceGridConfig.addItemAction = { | ||
401 | + onAction: function ($event) { | ||
402 | + addDevicesToEdge($event); | ||
403 | + }, | ||
404 | + name: function() { return $translate.instant('device.assign-devices') }, | ||
405 | + details: function() { return $translate.instant('device.assign-new-device') }, | ||
406 | + icon: "add" | ||
407 | + }; | ||
408 | + } else if (vm.devicesScope === 'edge_customer_user') { | ||
409 | + deviceActionsList.push( | ||
410 | + { | ||
411 | + onAction: function ($event, item) { | ||
412 | + manageCredentials($event, item); | ||
413 | + }, | ||
414 | + name: function() { return $translate.instant('device.credentials') }, | ||
415 | + details: function() { return $translate.instant('device.view-credentials') }, | ||
416 | + icon: "security" | ||
417 | + } | ||
418 | + ); | ||
419 | + vm.deviceGridConfig.addItemAction = {}; | ||
420 | + } | ||
402 | vm.deviceGridConfig.addItemActions = []; | 421 | vm.deviceGridConfig.addItemActions = []; |
403 | } | 422 | } |
404 | 423 |
@@ -31,16 +31,16 @@ | @@ -31,16 +31,16 @@ | ||
31 | </div> | 31 | </div> |
32 | <div layout="row"> | 32 | <div layout="row"> |
33 | <md-button ng-click="onManageEdgeAssets({event: $event})" | 33 | <md-button ng-click="onManageEdgeAssets({event: $event})" |
34 | - ng-show="!isEdit && edgeScope === 'tenant'" | 34 | + ng-show="!isEdit && (edgeScope === 'tenant' || edgeScope === 'customer_user')" |
35 | class="md-raised md-primary">{{ 'edge.assets' | translate }}</md-button> | 35 | class="md-raised md-primary">{{ 'edge.assets' | translate }}</md-button> |
36 | <md-button ng-click="onManageEdgeDevices({event: $event})" | 36 | <md-button ng-click="onManageEdgeDevices({event: $event})" |
37 | - ng-show="!isEdit && edgeScope === 'tenant'" | 37 | + ng-show="!isEdit && (edgeScope === 'tenant' || edgeScope === 'customer_user')" |
38 | class="md-raised md-primary">{{ 'edge.devices' | translate }}</md-button> | 38 | class="md-raised md-primary">{{ 'edge.devices' | translate }}</md-button> |
39 | <md-button ng-click="onManageEdgeEntityViews({event: $event})" | 39 | <md-button ng-click="onManageEdgeEntityViews({event: $event})" |
40 | - ng-show="!isEdit && edgeScope === 'tenant'" | 40 | + ng-show="!isEdit && (edgeScope === 'tenant' || edgeScope === 'customer_user')" |
41 | class="md-raised md-primary">{{ 'edge.entity-views' | translate }}</md-button> | 41 | class="md-raised md-primary">{{ 'edge.entity-views' | translate }}</md-button> |
42 | <md-button ng-click="onManageEdgeDashboards({event: $event})" | 42 | <md-button ng-click="onManageEdgeDashboards({event: $event})" |
43 | - ng-show="!isEdit && edgeScope === 'tenant'" | 43 | + ng-show="!isEdit && (edgeScope === 'tenant' || edgeScope === 'customer_user')" |
44 | class="md-raised md-primary">{{ 'edge.dashboards' | translate }}</md-button> | 44 | class="md-raised md-primary">{{ 'edge.dashboards' | translate }}</md-button> |
45 | <md-button ng-click="onManageEdgeRuleChains({event: $event})" | 45 | <md-button ng-click="onManageEdgeRuleChains({event: $event})" |
46 | ng-show="!isEdit && edgeScope === 'tenant'" | 46 | ng-show="!isEdit && edgeScope === 'tenant'" |
@@ -399,9 +399,59 @@ export function EdgeController($rootScope, userService, edgeService, customerSer | @@ -399,9 +399,59 @@ export function EdgeController($rootScope, userService, edgeService, customerSer | ||
399 | 399 | ||
400 | } else if (vm.edgesScope === 'customer_user') { | 400 | } else if (vm.edgesScope === 'customer_user') { |
401 | vm.edgeGridConfig.addItemAction = {}; | 401 | vm.edgeGridConfig.addItemAction = {}; |
402 | + edgeActionsList.push( | ||
403 | + { | ||
404 | + onAction: function ($event, item) { | ||
405 | + openEdgeAssets($event, item); | ||
406 | + }, | ||
407 | + name: function() { return $translate.instant('asset.assets') }, | ||
408 | + details: function() { | ||
409 | + return $translate.instant('edge.manage-edge-assets'); | ||
410 | + }, | ||
411 | + icon: "domain" | ||
412 | + } | ||
413 | + ); | ||
414 | + | ||
415 | + edgeActionsList.push( | ||
416 | + { | ||
417 | + onAction: function ($event, item) { | ||
418 | + openEdgeDevices($event, item); | ||
419 | + }, | ||
420 | + name: function() { return $translate.instant('device.devices') }, | ||
421 | + details: function() { | ||
422 | + return $translate.instant('edge.manage-edge-devices'); | ||
423 | + }, | ||
424 | + icon: "devices_other" | ||
425 | + } | ||
426 | + ); | ||
427 | + | ||
428 | + edgeActionsList.push( | ||
429 | + { | ||
430 | + onAction: function ($event, item) { | ||
431 | + openEdgeEntityViews($event, item); | ||
432 | + }, | ||
433 | + name: function() { return $translate.instant('entity-view.entity-views') }, | ||
434 | + details: function() { | ||
435 | + return $translate.instant('edge.manage-edge-entity-views'); | ||
436 | + }, | ||
437 | + icon: "view_quilt" | ||
438 | + } | ||
439 | + ); | ||
440 | + | ||
441 | + edgeActionsList.push( | ||
442 | + { | ||
443 | + onAction: function ($event, item) { | ||
444 | + openEdgeDashboards($event, item); | ||
445 | + }, | ||
446 | + name: function() { return $translate.instant('dashboard.dashboards') }, | ||
447 | + details: function() { | ||
448 | + return $translate.instant('edge.manage-edge-dashboards'); | ||
449 | + }, | ||
450 | + icon: "dashboard" | ||
451 | + } | ||
452 | + ); | ||
402 | } | 453 | } |
403 | vm.edgeGridConfig.addItemActions = []; | 454 | vm.edgeGridConfig.addItemActions = []; |
404 | - | ||
405 | } | 455 | } |
406 | 456 | ||
407 | vm.edgeGridConfig.refreshParamsFunc = refreshEdgesParamsFunction; | 457 | vm.edgeGridConfig.refreshParamsFunc = refreshEdgesParamsFunction; |
@@ -55,7 +55,7 @@ export default function EdgeRoutes($stateProvider, types) { | @@ -55,7 +55,7 @@ export default function EdgeRoutes($stateProvider, types) { | ||
55 | url: '/:edgeId/entityViews', | 55 | url: '/:edgeId/entityViews', |
56 | params: {'topIndex': 0}, | 56 | params: {'topIndex': 0}, |
57 | module: 'private', | 57 | module: 'private', |
58 | - auth: ['TENANT_ADMIN'], | 58 | + auth: ['TENANT_ADMIN', 'CUSTOMER_USER'], |
59 | views: { | 59 | views: { |
60 | "content@home": { | 60 | "content@home": { |
61 | templateUrl: entityViewsTemplate, | 61 | templateUrl: entityViewsTemplate, |
@@ -77,7 +77,7 @@ export default function EdgeRoutes($stateProvider, types) { | @@ -77,7 +77,7 @@ export default function EdgeRoutes($stateProvider, types) { | ||
77 | url: '/:edgeId/devices', | 77 | url: '/:edgeId/devices', |
78 | params: {'topIndex': 0}, | 78 | params: {'topIndex': 0}, |
79 | module: 'private', | 79 | module: 'private', |
80 | - auth: ['TENANT_ADMIN'], | 80 | + auth: ['TENANT_ADMIN', 'CUSTOMER_USER'], |
81 | views: { | 81 | views: { |
82 | "content@home": { | 82 | "content@home": { |
83 | templateUrl: devicesTemplate, | 83 | templateUrl: devicesTemplate, |
@@ -99,7 +99,7 @@ export default function EdgeRoutes($stateProvider, types) { | @@ -99,7 +99,7 @@ export default function EdgeRoutes($stateProvider, types) { | ||
99 | url: '/:edgeId/assets', | 99 | url: '/:edgeId/assets', |
100 | params: {'topIndex': 0}, | 100 | params: {'topIndex': 0}, |
101 | module: 'private', | 101 | module: 'private', |
102 | - auth: ['TENANT_ADMIN'], | 102 | + auth: ['TENANT_ADMIN', 'CUSTOMER_USER'], |
103 | views: { | 103 | views: { |
104 | "content@home": { | 104 | "content@home": { |
105 | templateUrl: assetsTemplate, | 105 | templateUrl: assetsTemplate, |
@@ -121,7 +121,7 @@ export default function EdgeRoutes($stateProvider, types) { | @@ -121,7 +121,7 @@ export default function EdgeRoutes($stateProvider, types) { | ||
121 | url: '/:edgeId/dashboards', | 121 | url: '/:edgeId/dashboards', |
122 | params: {'topIndex': 0}, | 122 | params: {'topIndex': 0}, |
123 | module: 'private', | 123 | module: 'private', |
124 | - auth: ['TENANT_ADMIN'], | 124 | + auth: ['TENANT_ADMIN', 'CUSTOMER_USER'], |
125 | views: { | 125 | views: { |
126 | "content@home": { | 126 | "content@home": { |
127 | templateUrl: dashboardsTemplate, | 127 | templateUrl: dashboardsTemplate, |
@@ -118,7 +118,11 @@ export function EntityViewController($rootScope, userService, entityViewService, | @@ -118,7 +118,11 @@ export function EntityViewController($rootScope, userService, entityViewService, | ||
118 | var user = userService.getCurrentUser(); | 118 | var user = userService.getCurrentUser(); |
119 | 119 | ||
120 | if (user.authority === 'CUSTOMER_USER') { | 120 | if (user.authority === 'CUSTOMER_USER') { |
121 | - vm.entityViewsScope = 'customer_user'; | 121 | + if (vm.entityViewsScope === 'edge') { |
122 | + vm.entityViewsScope = 'edge_customer_user'; | ||
123 | + } else { | ||
124 | + vm.entityViewsScope = 'customer_user'; | ||
125 | + } | ||
122 | customerId = user.customerId; | 126 | customerId = user.customerId; |
123 | } | 127 | } |
124 | if (customerId) { | 128 | if (customerId) { |
@@ -284,48 +288,63 @@ export function EntityViewController($rootScope, userService, entityViewService, | @@ -284,48 +288,63 @@ export function EntityViewController($rootScope, userService, entityViewService, | ||
284 | } else if (vm.entityViewsScope === 'customer_user') { | 288 | } else if (vm.entityViewsScope === 'customer_user') { |
285 | vm.entityViewGridConfig.addItemAction = {}; | 289 | vm.entityViewGridConfig.addItemAction = {}; |
286 | } | 290 | } |
287 | - } else if (vm.entityViewsScope === 'edge') { | 291 | + } else if (vm.entityViewsScope === 'edge' || vm.entityViewsScope === 'edge_customer_user') { |
288 | fetchEntityViewsFunction = function (pageLink) { | 292 | fetchEntityViewsFunction = function (pageLink) { |
289 | return entityViewService.getEdgeEntityViews(edgeId, pageLink, null); | 293 | return entityViewService.getEdgeEntityViews(edgeId, pageLink, null); |
290 | }; | 294 | }; |
291 | - deleteEntityViewFunction = function (entityViewId) { | ||
292 | - return entityViewService.unassignEntityViewFromEdge(edgeId, entityViewId); | ||
293 | - }; | ||
294 | - refreshEntityViewsParamsFunction = function () { | ||
295 | - return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
296 | - }; | ||
297 | 295 | ||
298 | - entityViewActionsList.push({ | ||
299 | - onAction: function ($event, item) { | ||
300 | - unassignFromEdge($event, item, false); | ||
301 | - }, | ||
302 | - name: function() { return $translate.instant('action.unassign') }, | ||
303 | - details: function() { return $translate.instant('edge.unassign-from-edge') }, | ||
304 | - icon: "assignment_return" | ||
305 | - } | ||
306 | - ); | 296 | + if (vm.entityViewsScope === 'edge') { |
297 | + deleteEntityViewFunction = function (entityViewId) { | ||
298 | + return entityViewService.unassignEntityViewFromEdge(edgeId, entityViewId); | ||
299 | + }; | ||
300 | + refreshEntityViewsParamsFunction = function () { | ||
301 | + return {"edgeId": edgeId, "topIndex": vm.topIndex}; | ||
302 | + }; | ||
307 | 303 | ||
308 | - entityViewGroupActionsList.push( | ||
309 | - { | ||
310 | - onAction: function ($event, items) { | ||
311 | - unassignEntityViewsFromEdge($event, items); | 304 | + entityViewActionsList.push({ |
305 | + onAction: function ($event, item) { | ||
306 | + unassignFromEdge($event, item, false); | ||
307 | + }, | ||
308 | + name: function () { | ||
309 | + return $translate.instant('action.unassign') | ||
310 | + }, | ||
311 | + details: function () { | ||
312 | + return $translate.instant('edge.unassign-from-edge') | ||
313 | + }, | ||
314 | + icon: "assignment_return" | ||
315 | + } | ||
316 | + ); | ||
317 | + | ||
318 | + entityViewGroupActionsList.push( | ||
319 | + { | ||
320 | + onAction: function ($event, items) { | ||
321 | + unassignEntityViewsFromEdge($event, items); | ||
322 | + }, | ||
323 | + name: function () { | ||
324 | + return $translate.instant('entity-view.unassign-entity-views') | ||
325 | + }, | ||
326 | + details: function (selectedCount) { | ||
327 | + return $translate.instant('entity-view.unassign-entity-views-from-edge-action-title', {count: selectedCount}, "messageformat"); | ||
328 | + }, | ||
329 | + icon: "assignment_return" | ||
330 | + } | ||
331 | + ); | ||
332 | + | ||
333 | + vm.entityViewGridConfig.addItemAction = { | ||
334 | + onAction: function ($event) { | ||
335 | + addEntityViewsToEdge($event); | ||
312 | }, | 336 | }, |
313 | - name: function() { return $translate.instant('entity-view.unassign-entity-views') }, | ||
314 | - details: function(selectedCount) { | ||
315 | - return $translate.instant('entity-view.unassign-entity-views-from-edge-action-title', {count: selectedCount}, "messageformat"); | 337 | + name: function () { |
338 | + return $translate.instant('entity-view.assign-entity-views') | ||
316 | }, | 339 | }, |
317 | - icon: "assignment_return" | ||
318 | - } | ||
319 | - ); | ||
320 | - | ||
321 | - vm.entityViewGridConfig.addItemAction = { | ||
322 | - onAction: function ($event) { | ||
323 | - addEntityViewsToEdge($event); | ||
324 | - }, | ||
325 | - name: function() { return $translate.instant('entity-view.assign-entity-views') }, | ||
326 | - details: function() { return $translate.instant('entity-view.assign-new-entity-view') }, | ||
327 | - icon: "add" | ||
328 | - }; | 340 | + details: function () { |
341 | + return $translate.instant('entity-view.assign-new-entity-view') | ||
342 | + }, | ||
343 | + icon: "add" | ||
344 | + }; | ||
345 | + } else if (vm.entityViewsScope === 'edge_customer_user') { | ||
346 | + vm.entityViewGridConfig.addItemAction = {}; | ||
347 | + } | ||
329 | vm.entityViewGridConfig.addItemActions = []; | 348 | vm.entityViewGridConfig.addItemActions = []; |
330 | 349 | ||
331 | } | 350 | } |