Skip to content

Commit

Permalink
feat(#3227): Move file management to settings (#3228)
Browse files Browse the repository at this point in the history
  • Loading branch information
dominikriemer authored Sep 14, 2024
1 parent 19cdd22 commit 1b7774b
Show file tree
Hide file tree
Showing 38 changed files with 237 additions and 316 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ public ResponseEntity<Map<String, Object>> create(@PathVariable(APP_DOC_NAME) St
path = "/{appDocName}/find",
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize(AuthConstants.HAS_WRITE_GENERIC_STORAGE_PRIVILEGE)
@PreAuthorize(AuthConstants.HAS_READ_GENERIC_STORAGE_PRIVILEGE)
public ResponseEntity<List<Map<String, Object>>> find(@PathVariable(APP_DOC_NAME) String appDocName,
@RequestBody Map<String, Object> query) {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public List<Role> makeDefaultRoles() {
Role.createDefaultRole(DefaultRole.Constants.ROLE_SERVICE_ADMIN_VALUE, "Service Admin", List.of()),
Role.createDefaultRole(DefaultRole.Constants.ROLE_DASHBOARD_ADMIN_VALUE, "Dashboard Admin", List.of(
DefaultPrivilege.Constants.PRIVILEGE_READ_DASHBOARD_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_WRITE_DASHBOARD_VALUE
DefaultPrivilege.Constants.PRIVILEGE_WRITE_DASHBOARD_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_VALUE
)),
Role.createDefaultRole(DefaultRole.Constants.ROLE_DASHBOARD_USER_VALUE, "Dashboard User", List.of(
DefaultPrivilege.Constants.PRIVILEGE_READ_DASHBOARD_VALUE,
Expand All @@ -52,11 +53,14 @@ public List<Role> makeDefaultRoles() {
Role.createDefaultRole(DefaultRole.Constants.ROLE_PIPELINE_ADMIN_VALUE, "Pipeline Admin", List.of(
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_WRITE_PIPELINE_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_ELEMENT_VALUE
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_ELEMENT_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_FILES_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_WRITE_FILES_VALUE
)),
Role.createDefaultRole(DefaultRole.Constants.ROLE_PIPELINE_USER_VALUE, "Pipeline User", List.of(
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_ELEMENT_VALUE
DefaultPrivilege.Constants.PRIVILEGE_READ_PIPELINE_ELEMENT_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_FILES_VALUE
)),
Role.createDefaultRole(DefaultRole.Constants.ROLE_ASSET_ADMIN_VALUE, "Asset Admin", List.of(
DefaultPrivilege.Constants.PRIVILEGE_READ_ASSETS_VALUE,
Expand All @@ -83,7 +87,9 @@ public List<Role> makeDefaultRoles() {
)),
Role.createDefaultRole(DefaultRole.Constants.ROLE_CONNECT_ADMIN_VALUE, "Connect Admin", List.of(
DefaultPrivilege.Constants.PRIVILEGE_WRITE_ADAPTER_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_ADAPTER_VALUE
DefaultPrivilege.Constants.PRIVILEGE_READ_ADAPTER_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_READ_FILES_VALUE,
DefaultPrivilege.Constants.PRIVILEGE_WRITE_FILES_VALUE
))
);
}
Expand Down
6 changes: 3 additions & 3 deletions ui/cypress/support/utils/FileManagementUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
export class FileManagementUtils {
public static addFile(filePath: string) {
// Go to StreamPipes file management
cy.visit('#/files');
cy.visit('#/configuration/files');

// Open file upload dialog
cy.dataCy('sp-open-file-upload-dialog').click();
Expand All @@ -32,7 +32,7 @@ export class FileManagementUtils {

public static deleteFile() {
// Go to StreamPipes file management
cy.visit('#/files');
cy.visit('#/configuration/files');
// Check if file was uploaded and delete it
cy.dataCy('delete').should('have.length', 1);
cy.dataCy('delete').click();
Expand All @@ -44,7 +44,7 @@ export class FileManagementUtils {
const downloadsFolder = Cypress.config('downloadsFolder');

// Go to StreamPipes file management
cy.visit('#/files');
cy.visit('#/configuration/files');
// Check if file was uploaded
cy.dataCy('download').should('have.length', 1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ for (var i = 0; i < testedRoles.length; i++) {
UserUtils.goToUserConfiguration();
cy.dataCy('navigation-icon', { timeout: 10000 }).should(
'have.length',
9,
8,
);

cy.dataCy('user-accounts-table-row', { timeout: 10000 }).should(
Expand Down Expand Up @@ -75,12 +75,12 @@ for (var i = 0; i < testedRoles.length; i++) {
} else if (testRole == UserRole.ROLE_DASHBOARD_ADMIN) {
cy.dataCy('navigation-icon', { timeout: 10000 }).should(
'have.length',
2,
4,
);
} else if (testRole == UserRole.ROLE_DATA_EXPLORER_ADMIN) {
cy.dataCy('navigation-icon', { timeout: 10000 }).should(
'have.length',
2,
4,
);
} else if (testRole == UserRole.ROLE_CONNECT_ADMIN) {
cy.dataCy('navigation-icon', { timeout: 10000 }).should(
Expand Down
5 changes: 3 additions & 2 deletions ui/deployment/app-routing.module.mst
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import { RegistrationAllowedCanActivateGuard } from './_guards/registration-allo
import { RestorePasswordAllowedCanActivateGuard } from './_guards/restore-password-allowed.can-activate.guard';
import { SetNewPasswordComponent } from './login/components/set-new-password/set-new-password.component';
import { ActivateAccountComponent } from './login/components/activate-account/activate-account.component';
import { UserPrivilege } from './_enums/user-privilege.enum';

{{#modulesActive}}
{{#componentImport}}
Expand All @@ -60,10 +61,10 @@ const routes: Routes = [
{ path: '', component: HomeComponent, canActivate: [ConfiguredCanActivateGuard] },
{{#modulesActive}}
{{#componentImport}}
{ path: '{{{link}}}', component: {{{component}}}, data: { authPageNames: [{{{pageNames}}}]}},
{ path: '{{{link}}}', component: {{{component}}}, data: { privileges: {{{privileges}}}, authPageNames: [{{{pageNames}}}]}},
{{/componentImport}}
{{^componentImport}}
{ path: '{{{link}}}', data: { authPageNames: [{{{pageNames}}}]}, loadChildren: () => import('{{{path}}}').then(m => m.{{{moduleName}}})},
{ path: '{{{link}}}', data: { privileges: {{{privileges}}}, authPageNames: [{{{pageNames}}}]}, loadChildren: () => import('{{{path}}}').then(m => m.{{{moduleName}}})},
{{/componentImport}}
{{/modulesActive}}

Expand Down
34 changes: 11 additions & 23 deletions ui/deployment/base-navigation.component.mst
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { PageName } from '../../_enums/page-name.enum';
import { AuthService } from '../../services/auth.service';
import { CurrentUserService } from '@streampipes/shared-ui';
import { AppConstants } from '../../services/app.constants';
import { UserPrivilege } from '../../_enums/user-privilege.enum';

export abstract class BaseNavigationComponent {

Expand All @@ -36,32 +37,18 @@ export abstract class BaseNavigationComponent {
title: 'Home',
icon: 'home',
pagesNames: [PageName.HOME],
privileges: [],
visible: false
},
{{#modulesActive}}
{{^admin}}
{
link: '{{{link}}}',
title: '{{{title}}}',
icon: '{{{icon}}}',
pageNames: [{{{pageNames}}}],
privileges: {{{privileges}}},
visible: false
},
{{/admin}}
{{/modulesActive}}
];

admin = [
{{#modulesActive}}
{{#admin}}
{
link: '{{{link}}}',
title: '{{{title}}}',
icon: '{{{icon}}}',
pageNames: [{{{pageNames}}}],
visible: false
},
{{/admin}}
{{/modulesActive}}
];

Expand All @@ -77,9 +64,11 @@ export abstract class BaseNavigationComponent {

onInit() {
this.currentUserService.user$.subscribe(user => {
this.menu.forEach(m => m.visible = this.isNavItemVisible(m.pageNames));
this.admin.forEach(m => m.visible = this.isNavItemVisible(m.pageNames));
this.notificationsVisible = this.isNavItemVisible([PageName.NOTIFICATIONS]);
this.menu.forEach(m => m.visible = this.isNavItemVisible(m.privileges));
this.notificationsVisible = this.isNavItemVisible([
UserPrivilege.PRIVILEGE_READ_PIPELINE,
UserPrivilege.PRIVILEGE_WRITE_PIPELINE
]);
});
this.activePage = this.router.url.replace('/', '');
this.activePageName = this.getPageTitle(this.activePage);
Expand All @@ -96,9 +85,8 @@ export abstract class BaseNavigationComponent {
}

getPageTitle(path) {
const allMenuItems = this.menu.concat(this.admin);
let currentTitle = this.appConstants.APP_NAME;
allMenuItems.forEach(m => {
this.menu.forEach(m => {
if (m.link === path) {
currentTitle = m.title;
}
Expand All @@ -120,8 +108,8 @@ export abstract class BaseNavigationComponent {
this.activePageName = this.getPageTitle(this.activePage);
}

public isNavItemVisible(pageNames?: PageName[]): boolean {
return this.authService.isAnyAccessGranted(pageNames);
public isNavItemVisible(privileges: string[]): boolean {
return this.authService.isAnyAccessGranted(privileges);
}

}
1 change: 0 additions & 1 deletion ui/deployment/dev/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,4 @@ modules:
- spDashboard
- spDataExplorer
- spAssets
- spFiles
- spConfiguration
9 changes: 7 additions & 2 deletions ui/deployment/home.service.mst
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
DataViewDataExplorerService, PipelineElementService,
PipelineService
} from '@streampipes/platform-services';
import { UserRole } from '../_enums/user-role.enum';
import { UserPrivilege } from '../_enums/user-privilege.enum';

@Injectable({providedIn: 'root'})
export class HomeService {
Expand All @@ -40,7 +40,7 @@ export class HomeService {
}

getFilteredServiceLinks() {
return this.getServiceLinks().filter(s => this.authService.isAnyAccessGranted(s.pageNames));
return this.getServiceLinks().filter(s => this.authService.isAnyAccessGranted(s.privileges));
}

getServiceLinks(): ServiceLink[] {
Expand All @@ -51,6 +51,7 @@ export class HomeService {
description: "{{description}}",
icon: "{{{icon}}}",
pageNames: [{{{pageNames}}}],
privileges: {{{privileges}}},
link: {
newWindow: false,
value: "{{{link}}}"
Expand All @@ -74,6 +75,10 @@ export class HomeService {
description: "The notification module lets you view all notifications generated by pipelines.",
icon: "chat",
pageNames: [PageName.NOTIFICATIONS],
privileges: [
UserPrivilege.PRIVILEGE_READ_PIPELINE,
UserPrivilege.PRIVILEGE_WRITE_PIPELINE
],
link: {
newWindow: false,
value: "notifications"
Expand Down
44 changes: 15 additions & 29 deletions ui/deployment/modules.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ spAssets:
title: 'Asset Management'
description: 'Manage assets which help assigning pipelines, dashboards and adapters to real-world objects such as machines and plants.'
icon: 'precision_manufacturing'
admin: true
privileges: '[UserPrivilege.PRIVILEGE_READ_ASSETS, UserPrivilege.PRIVILEGE_WRITE_ASSETS]'
pageNames: 'PageName.ASSETS'
showStatusBox: false
spConnect:
Expand All @@ -38,7 +38,7 @@ spConnect:
title: 'Connect'
description: 'StreamPipes Connect lets you easily connect new data sources for a variety of data formats and protocols.'
icon: 'power'
admin: False
privileges: '[UserPrivilege.PRIVILEGE_READ_ADAPTER, UserPrivilege.PRIVILEGE_WRITE_ADAPTER]'
pageNames: 'PageName.CONNECT'
showStatusBox: true
statusBox:
Expand All @@ -47,8 +47,8 @@ spConnect:
title: 'Adapters'
createTitle: 'New adapter'
dataFns: '[this.adapterService.getAdapters()]'
viewRoles: '[UserRole.ROLE_CONNECT_ADMIN]'
createRoles: '[UserRole.ROLE_CONNECT_ADMIN]'
viewRoles: '[UserPrivilege.PRIVILEGE_READ_ADAPTER, UserPrivilege.PRIVILEGE_WRITE_ADAPTER]'
createRoles: '[UserPrivilege.PRIVILEGE_WRITE_ADAPTER]'
spPipelines:
componentImport: False
moduleName: 'PipelinesModule'
Expand All @@ -60,17 +60,17 @@ spPipelines:
title: 'Pipelines'
description: 'All created pipelines are available in the pipeline view, where you can also start and stop pipelines.'
icon: 'play_arrow'
admin: False
pageNames: 'PageName.PIPELINE_OVERVIEW'
privileges: '[UserPrivilege.PRIVILEGE_READ_PIPELINE, UserPrivilege.PRIVILEGE_WRITE_PIPELINE]'
showStatusBox: true
statusBox:
link: "['pipelines']"
createLinks: "['pipelines', 'create']"
title: 'Pipelines'
createTitle: 'New pipeline'
dataFns: '[this.pipelineService.getPipelines()]'
viewRoles: '[UserRole.ROLE_PIPELINE_ADMIN, UserRole.ROLE_PIPELINE_USER]'
createRoles: '[UserRole.ROLE_PIPELINE_ADMIN]'
viewRoles: '[UserPrivilege.PRIVILEGE_READ_PIPELINE, UserPrivilege.PRIVILEGE_WRITE_PIPELINE]'
createRoles: '[UserPrivilege.PRIVILEGE_WRITE_PIPELINE]'
spConfiguration:
componentImport: False
moduleName: 'ConfigurationModule'
Expand All @@ -83,7 +83,7 @@ spConfiguration:
description: 'In the configuration module, basic StreamPipes settings and services can be configured.'
icon: 'settings'
pageNames: 'PageName.SETTINGS'
admin: True
privileges: '[UserPrivilege.PRIVILEGE_WRITE_ASSETS, UserPrivilege.PRIVILEGE_WRITE_LABELS, UserPrivilege.PRIVILEGE_READ_FILES, UserPrivilege.PRIVILEGE_WRITE_FILES]'
showStatusBox: false
spAppOverview:
componentImport: False
Expand All @@ -96,8 +96,8 @@ spAppOverview:
title: 'Apps'
description: 'The app overview lets you access additional plugins.'
icon: 'apps'
admin: false
pageNames: 'PageName.APPS'
privileges: '[UserPrivilege.PRIVILEGE_READ_APPS, UserPrivilege.PRIVILEGE_WRITE_APPS]'
showStatusBox: false
spDashboard:
componentImport: False
Expand All @@ -110,17 +110,17 @@ spDashboard:
title: 'Dashboard'
description: 'The live dashboard visualizes data in real-time.'
icon: 'insert_chart'
admin: false
pageNames: 'PageName.DASHBOARD'
privileges: '[UserPrivilege.PRIVILEGE_READ_DASHBOARD, UserPrivilege.PRIVILEGE_WRITE_DASHBOARD]'
showStatusBox: true
statusBox:
link: "['dashboard']"
createLinks: "['dashboard']"
title: 'Dashboards'
createTitle: 'New dashboard'
dataFns: '[this.dashboardService.getDashboards()]'
viewRoles: '[UserRole.ROLE_DASHBOARD_ADMIN, UserRole.ROLE_DASHBOARD_USER]'
createRoles: '[UserRole.ROLE_DASHBOARD_ADMIN]'
viewRoles: '[UserPrivilege.PRIVILEGE_READ_DASHBOARD, UserPrivilege.PRIVILEGE_WRITE_DASHBOARD]'
createRoles: '[UserPrivilege.PRIVILEGE_WRITE_DASHBOARD]'
spDataExplorer:
componentImport: False
moduleName: 'DataExplorerModule'
Expand All @@ -132,28 +132,14 @@ spDataExplorer:
title: 'Data Explorer'
description: 'The data explorer lets you visually inspect historical data from your connected sources.'
icon: 'search'
admin: false
pageNames: 'PageName.DATA_EXPLORER'
privileges: '[UserPrivilege.PRIVILEGE_READ_DATA_EXPLORER_VIEW, UserPrivilege.PRIVILEGE_WRITE_DATA_EXPLORER_VIEW]'
showStatusBox: true
statusBox:
link: "['dataexplorer']"
createLinks: "['dataexplorer']"
title: 'Data Views'
createTitle: 'New data view'
dataFns: '[this.dataViewService.getDataViews()]'
viewRoles: '[UserRole.ROLE_DATA_EXPLORER_ADMIN, UserRole.ROLE_DATA_EXPLORER_USER]'
createRoles: '[UserRole.ROLE_DATA_EXPLORER_ADMIN]'
spFiles:
componentImport: False
moduleName: 'FilesModule'
component: 'FilesComponent'
componentPath: './files/files.component'
path: './files/files.module'
link: 'files'
url: '/files'
title: 'File Management'
description: 'The file management module lets you upload and manage files that are used by adapters or pipeline elements.'
icon: 'folder'
admin: true
pageNames: 'PageName.FILE_UPLOAD'
showStatusBox: false
viewRoles: '[UserPrivilege.PRIVILEGE_READ_DATA_EXPLORER_VIEW, UserPrivilege.PRIVILEGE_WRITE_DATA_EXPLORER_VIEW]'
createRoles: '[UserPrivilege.PRIVILEGE_WRITE_DATA_EXPLORER_VIEW]'
1 change: 1 addition & 0 deletions ui/deployment/prebuild.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ for (let module of config.modules) {
path: modules[module]['path'],
link: modules[module]['link'],
pageNames: modules[module]['pageNames'],
privileges: modules[module]['privileges'],
url: modules[module]['url'],
title: modules[module]['title'],
icon: modules[module]['icon'],
Expand Down
Loading

0 comments on commit 1b7774b

Please sign in to comment.