NIFIREG-30 - Add bucket side nav This closes #61.
Signed-off-by: Bryan Bende <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/nifi-registry/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-registry/commit/6c48025c Tree: http://git-wip-us.apache.org/repos/asf/nifi-registry/tree/6c48025c Diff: http://git-wip-us.apache.org/repos/asf/nifi-registry/diff/6c48025c Branch: refs/heads/master Commit: 6c48025c5253c3797e125396546ea2f9a906c328 Parents: 2e35235 Author: Scott Aslan <[email protected]> Authored: Thu Dec 21 10:44:18 2017 -0500 Committer: Bryan Bende <[email protected]> Committed: Thu Dec 21 10:45:35 2017 -0500 ---------------------------------------------------------------------- nifi-registry-web-ui/pom.xml | 18 +- .../src/main/frontend/package.json | 37 +- .../src/main/locale/messages.es.xlf | 24 ++ .../core/common/styles/_expansionPanels.scss | 4 - .../core/common/styles/_globalVars.scss | 1 + .../platform/core/common/styles/_menus.scss | 5 - .../platform/core/common/styles/_tables.scss | 5 + .../src/main/webapp/WEB-INF/pages/index.jsp | 20 +- .../nf-registry-administration.spec.js | 4 +- .../nf-registry-add-user-to-groups.js | 6 + .../nf-registry-add-user-to-groups.spec.js | 2 +- .../dialogs/add-user/nf-registry-add-user.js | 12 +- .../nf-registry-create-new-group.js | 12 +- .../users/nf-registry-users-administration.html | 39 +- .../users/nf-registry-users-administration.js | 11 +- .../nf-registry-users-adminstration.spec.js | 6 +- .../manage-group/nf-registry-manage-group.html | 268 +++++++----- .../manage-group/nf-registry-manage-group.js | 54 ++- .../manage-user/nf-registry-manage-user.html | 280 ++++++++----- .../manage-user/nf-registry-manage-user.js | 12 +- .../nf-registry-bucket-permissions.html | 114 ----- .../nf-registry-bucket-permissions.js | 85 ---- .../nf-registry-add-policy-to-bucket.html | 99 +++++ .../nf-registry-add-policy-to-bucket.js | 381 +++++++++++++++++ .../nf-registry-create-bucket.html | 46 ++ .../create-bucket/nf-registry-create-bucket.js | 81 ++++ .../nf-registry-create-bucket.spec.js | 77 ++++ .../nf-registry-edit-bucket-policy.html | 55 +++ .../nf-registry-edit-bucket-policy.js | 352 ++++++++++++++++ .../dialogs/nf-registry-create-bucket.html | 46 -- .../dialogs/nf-registry-create-bucket.js | 77 ---- .../dialogs/nf-registry-create-bucket.spec.js | 77 ---- .../nf-registry-workflow-administration.html | 20 +- .../nf-registry-workflow-administration.js | 9 +- .../nf-registry-workflow-administration.spec.js | 6 +- .../nf-registry-manage-bucket.html | 128 ++++++ .../manage-bucket/nf-registry-manage-bucket.js | 415 +++++++++++++++++++ .../nf-registry-bucket-grid-list-viewer.js | 3 +- .../nf-registry-bucket-grid-list-viewer.spec.js | 4 +- .../nf-registry-droplet-grid-list-viewer.js | 3 +- ...nf-registry-droplet-grid-list-viewer.spec.js | 4 +- .../registry/nf-registry-grid-list-viewer.html | 15 +- .../registry/nf-registry-grid-list-viewer.js | 3 +- .../nf-registry-grid-list-viewer.spec.js | 4 +- .../explorer/nf-registry-explorer.spec.js | 4 +- .../login/dialogs/nf-registry-user-login.js | 20 +- .../webapp/images/registry-background-logo.svg | 17 + .../src/main/webapp/nf-registry.html | 7 +- .../src/main/webapp/nf-registry.module.js | 12 +- .../src/main/webapp/nf-registry.routes.js | 9 +- .../src/main/webapp/nf-registry.spec.js | 4 +- .../src/main/webapp/services/nf-registry.api.js | 147 +++++-- .../webapp/services/nf-registry.api.spec.js | 41 +- .../services/nf-registry.auth-guard.service.js | 21 +- .../main/webapp/services/nf-registry.service.js | 131 ++++-- .../webapp/services/nf-registry.service.spec.js | 38 +- .../src/main/webapp/systemjs.builder.config.js | 6 +- .../src/main/webapp/theming/_helperClasses.scss | 8 + .../main/webapp/theming/_structureElements.scss | 149 +++---- .../users/_structureElements.scss | 6 + .../explorer/grid-list/_structureElements.scss | 3 +- 61 files changed, 2585 insertions(+), 962 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/pom.xml ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/pom.xml b/nifi-registry-web-ui/pom.xml index 4f14af7..51e65e9 100644 --- a/nifi-registry-web-ui/pom.xml +++ b/nifi-registry-web-ui/pom.xml @@ -192,6 +192,7 @@ <filtering>false</filtering> <includes> <!-- roboto --> + <include>roboto-fontface/fonts/Roboto-Slab/Roboto-Slab-Regular.ttf</include> <include>roboto-fontface/fonts/Roboto/Roboto-Regular.ttf</include> <include>roboto-fontface/fonts/Roboto/Roboto-Medium.ttf</include> <include>roboto-fontface/fonts/Roboto/Roboto-Light.ttf</include> @@ -484,7 +485,22 @@ <directory>${frontend.working.dir}/node_modules</directory> <filtering>false</filtering> <includes> - <include>**/*</include> + <include>@fluid-design-system/**/*</include> + <include>@angular/**/*</include> + <include>hammerjs/**/*</include> + <include>@covalent/**/*</include> + <include>rxjs/**/*</include> + <include>moment/**/*</include> + <include>angular2-moment/**/*</include> + <include>zone.js/**/*</include> + <include>core-js/**/*</include> + <include>superagent/**/*</include> + <include>querystring/**/*</include> + <include>tslib/**/*</include> + <include>systemjs/**/*</include> + <include>systemjs-plugin-text/**/*</include> + <include>jquery/**/*</include> + <include>roboto-fontface/**/*</include> </includes> </resource> </resources> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/frontend/package.json ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/frontend/package.json b/nifi-registry-web-ui/src/main/frontend/package.json index 4bfe687..080c676 100644 --- a/nifi-registry-web-ui/src/main/frontend/package.json +++ b/nifi-registry-web-ui/src/main/frontend/package.json @@ -14,13 +14,16 @@ "url": "https://github.com/apache/nifi-registry" }, "dependencies": { - "@covalent/core": "1.0.0-beta.8-1", - "angular2-moment": "1.6.0", - "font-awesome": "4.7.0", - "moment": "2.18.1", - "roboto-fontface": "0.7.0" - }, - "devDependencies": { + "querystring": "0.2.0", + "reset-css": "2.2.0", + "rxjs": "5.4.3", + "superagent": "3.6.3", + "systemjs": "0.20.17", + "systemjs-plugin-text": "0.0.11", + "zone.js": "0.8.7", + "tslib": "1.8.0", + "material-design-icons": "3.0.1", + "jquery": "3.2.1", "@angular/animations": "4.4.6", "@angular/cdk": "2.0.0-beta.12", "@angular/common": "4.4.6", @@ -34,15 +37,21 @@ "@angular/platform-browser-dynamic": "4.4.6", "@angular/router": "4.4.6", "angular2-jwt": "0.2.3", + "@covalent/core": "1.0.0-beta.8-1", + "angular2-moment": "1.6.0", + "font-awesome": "4.7.0", + "moment": "2.18.1", + "hammerjs": "2.0.8", + "roboto-fontface": "0.7.0" + }, + "devDependencies": { "canonical-path": "0.0.2", "grunt": "0.4.5", "grunt-cli": "1.2.0", "grunt-contrib-compress": "1.4.3", "grunt-sass": "2.0.0", "grunt-systemjs-builder": "1.0.0", - "hammerjs": "2.0.8", "jasmine-core": "2.8.0", - "jquery": "3.2.1", "karma": "1.7.1", "karma-chrome-launcher": "2.2.0", "karma-cli": "1.0.1", @@ -52,15 +61,7 @@ "karma-spec-reporter": "0.0.31", "load-grunt-tasks": "3.5.2", "lodash": "4.16.2", - "material-design-icons": "3.0.1", - "protractor": "4.0.14", - "querystring": "0.2.0", - "reset-css": "2.2.0", - "rxjs": "5.4.3", - "superagent": "3.6.3", - "systemjs": "0.20.17", - "systemjs-plugin-text": "0.0.11", - "zone.js": "0.8.7" + "protractor": "4.0.14" }, "bundleDependencies": [], "private": true http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/locale/messages.es.xlf ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/locale/messages.es.xlf b/nifi-registry-web-ui/src/main/locale/messages.es.xlf index 9bee8cd..1839516 100644 --- a/nifi-registry-web-ui/src/main/locale/messages.es.xlf +++ b/nifi-registry-web-ui/src/main/locale/messages.es.xlf @@ -71,6 +71,18 @@ <note priority="1" from="description">A button for cancelling the creation of a new user in the registry.</note> <note priority="1" from="meaning">Cancel creation of new user</note> </trans-unit> + <trans-unit id="nf-admin-workflow-cancel-create-bucket-button" datatype="html"> + <source>Cancel</source> + <target state="new">Cancelar</target> + <note priority="1" from="description">A button for cancelling the creation of a new bucket in the registry.</note> + <note priority="1" from="meaning">Cancel creation of new bucket</note> + </trans-unit> + <trans-unit id="nf-admin-workflow-cancel-bucket-policy-creation-button" datatype="html"> + <source>Cancel</source> + <target state="new">Cancelar</target> + <note priority="1" from="description">A button for cancelling the creation of a new bucket policy in the registry.</note> + <note priority="1" from="meaning">Cancel creation of new bucket policy</note> + </trans-unit> <trans-unit id="nf-clear-user-login-button" datatype="html"> <source>Clear</source> <target state="new">Claro</target> @@ -89,6 +101,18 @@ <note priority="1" from="description">A button for creating a new group in the registry.</note> <note priority="1" from="meaning">Create new group button</note> </trans-unit> + <trans-unit id="nf-admin-workflow-create-bucket-button" datatype="html"> + <source>Create</source> + <target state="new">Crear</target> + <note priority="1" from="description">A button for creating a new bucket in the registry.</note> + <note priority="1" from="meaning">Create new bucket button</note> + </trans-unit> + <trans-unit id="nf-admin-workflow-apply-policy-to-bucket-button" datatype="html"> + <source>Apply</source> + <target state="new">Aplicar</target> + <note priority="1" from="description">A button for applying a new bucket policy in the registry.</note> + <note priority="1" from="meaning">Apply new bucket policy button</note> + </trans-unit> <trans-unit id="nf-admin-workflow-cancel-create-new-group-button" datatype="html"> <source>Cancel</source> <target state="new">Cancelar</target> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/platform/core/common/styles/_expansionPanels.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/platform/core/common/styles/_expansionPanels.scss b/nifi-registry-web-ui/src/main/platform/core/common/styles/_expansionPanels.scss index 9121c39..7b06102 100644 --- a/nifi-registry-web-ui/src/main/platform/core/common/styles/_expansionPanels.scss +++ b/nifi-registry-web-ui/src/main/platform/core/common/styles/_expansionPanels.scss @@ -42,10 +42,6 @@ body[fds] td-expansion-panel .td-expansion-panel-header .td-expansion-panel-head font-weight: bold; } -body[fds] td-expansion-panel { - box-shadow: none; -} - body[fds] td-expansion-panel .td-expansion-panel-header:hover:not(.mat-disabled) { background: $blue4; } http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/platform/core/common/styles/_globalVars.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/platform/core/common/styles/_globalVars.scss b/nifi-registry-web-ui/src/main/platform/core/common/styles/_globalVars.scss index 77c6ee2..86df2ef 100644 --- a/nifi-registry-web-ui/src/main/platform/core/common/styles/_globalVars.scss +++ b/nifi-registry-web-ui/src/main/platform/core/common/styles/_globalVars.scss @@ -42,6 +42,7 @@ $grey9: #b2b8c1; $grey10: #dbdee2; $grey11: #2C3E44; $grey12: #EEEFF0; +$grey13: #808793; $blue1: #1491C1; $blue2: #E7f6Fc; $blue3: #A7DFF2; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/platform/core/common/styles/_menus.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/platform/core/common/styles/_menus.scss b/nifi-registry-web-ui/src/main/platform/core/common/styles/_menus.scss index 26a2333..5a0c6a9 100644 --- a/nifi-registry-web-ui/src/main/platform/core/common/styles/_menus.scss +++ b/nifi-registry-web-ui/src/main/platform/core/common/styles/_menus.scss @@ -21,11 +21,6 @@ body[fds] .mat-menu-panel { border-radius: 2px; } -body[fds] .mat-menu-content { - padding-top: 0px; - padding-bottom: 0px; -} - body[fds] .mat-menu-item { font-size: 14px; color: $bodyTextColor; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/platform/core/common/styles/_tables.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/platform/core/common/styles/_tables.scss b/nifi-registry-web-ui/src/main/platform/core/common/styles/_tables.scss index 904a176..02ab2bc 100644 --- a/nifi-registry-web-ui/src/main/platform/core/common/styles/_tables.scss +++ b/nifi-registry-web-ui/src/main/platform/core/common/styles/_tables.scss @@ -53,6 +53,11 @@ body[fds] .td-data-table-cell .mat-icon-button { color: $linkColor; } +body[fds] .td-data-table-cell .mat-icon-button:disabled { + color: $grey13; + cursor: not-allowed; +} + body[fds] .td-data-table-cell .mat-button, body[fds] .td-data-table-cell .mat-icon-button, body[fds] .td-data-table-cell .mat-raised-button { height: 24px; width: 24px; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/WEB-INF/pages/index.jsp ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/WEB-INF/pages/index.jsp b/nifi-registry-web-ui/src/main/webapp/WEB-INF/pages/index.jsp index 0e8a950..3a9a2c9 100644 --- a/nifi-registry-web-ui/src/main/webapp/WEB-INF/pages/index.jsp +++ b/nifi-registry-web-ui/src/main/webapp/WEB-INF/pages/index.jsp @@ -3,30 +3,30 @@ contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with + (the 'License'); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, + distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --%> -<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %> +<%@ page contentType='text/html' pageEncoding='UTF-8' session='false' %> <!DOCTYPE html> <html> <head> <title>NiFi Registry</title> - <base href="/"> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - <link rel=âshortcut iconâ href=ânifi-registry/images/registry-favicon.pngâ type=âimage/png> - <link rel=âiconâ href=ânifi-registry/images/registry-favicon.pngâ type=âimage/png> + <base href='/'> + <meta charset='UTF-8'> + <meta name='viewport' content='width=device-width, initial-scale=1'> + <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/> + <link rel='shortcut icon' href='nifi-registry/images/registry-favicon.png' type='image/png'> + <link rel='icon' href='nifi-registry/images/registry-favicon.png' type='image/png'> ${nf.registry.style.tags} - <link rel="stylesheet" href='nifi-registry/node_modules/font-awesome/css/font-awesome.css'/> + <link rel='stylesheet' href='nifi-registry/node_modules/font-awesome/css/font-awesome.css'/> </head> <body> <nf-registry-app></nf-registry-app> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js index 258ae06..593d3e2 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/nf-registry-administration.spec.js @@ -34,7 +34,7 @@ var NfRegistryUsersAdministration = require('nifi-registry/components/administra var NfRegistryAddUser = require('nifi-registry/components/administration/users/dialogs/add-user/nf-registry-add-user.js'); var NfRegistryManageUser = require('nifi-registry/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js'); var NfRegistryManageGroup = require('nifi-registry/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js'); -var NfRegistryBucketPermissions = require('nifi-registry/components/administration/workflow/buckets/permissions/nf-registry-bucket-permissions.js'); +var NfRegistryManageBucket = require('nifi-registry/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js'); var NfRegistryWorkflowAdministration = require('nifi-registry/components/administration/workflow/nf-registry-workflow-administration.js'); var NfRegistryGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js'); var NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js'); @@ -69,7 +69,7 @@ describe('NfRegistryAdministration Component', function () { NfRegistryUsersAdministration, NfRegistryManageUser, NfRegistryManageGroup, - NfRegistryBucketPermissions, + NfRegistryManageBucket, NfRegistryAddUser, NfRegistryWorkflowAdministration, NfRegistryGridListViewer, http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js index 7cb0f62..d6492a9 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.js @@ -58,6 +58,12 @@ NfRegistryAddUserToGroups.prototype = { ngOnInit: function () { var self = this; + // filter out any groups that + // 1) that are not configurable + self.groups = self.groups.filter(function (group) { + return (group.configurable) ? true : false + }); + // 2) the user already belongs to this.data.user.userGroups.forEach(function (userGroup) { self.groups = self.groups.filter(function (group) { return (group.identifier !== userGroup.identifier) ? true : false http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.spec.js index 018a9c1..8996a32 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user-to-groups/nf-registry-add-user-to-groups.spec.js @@ -33,7 +33,7 @@ describe('NfRegistryAddUserToGroups Component isolated unit tests', function () nfRegistryService = new NfRegistryService(); // setup the nfRegistryService nfRegistryService.user = {identifier: 3, identity: 'User 3', userGroups: []}; - nfRegistryService.groups = [{identifier: 1, identity: 'Group 1', checked: true, users: []}]; + nfRegistryService.groups = [{identifier: 1, identity: 'Group 1', configurable: true, checked: true, users: []}]; nfRegistryApi = new NfRegistryApi(); snackBarService = new fdsSnackBarsModule.FdsSnackBarService(); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user/nf-registry-add-user.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user/nf-registry-add-user.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user/nf-registry-add-user.js index 2a31e33..bd6e978 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user/nf-registry-add-user.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/add-user/nf-registry-add-user.js @@ -46,10 +46,14 @@ NfRegistryAddUser.prototype = { addUser: function (addUserInput) { var self = this; this.nfRegistryApi.addUser(addUserInput.value).subscribe(function (user) { - self.nfRegistryService.users.push(user); - self.nfRegistryService.allUsersAndGroupsSelected = false; - self.nfRegistryService.filterUsersAndGroups(); - if (self.keepDialogOpen !== true) { + if (!user.error) { + self.nfRegistryService.users.push(user); + self.nfRegistryService.allUsersAndGroupsSelected = false; + self.nfRegistryService.filterUsersAndGroups(); + if (self.keepDialogOpen !== true) { + self.dialogRef.close(); + } + } else { self.dialogRef.close(); } }); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js index d3a574e..a992f78 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/dialogs/create-new-group/nf-registry-create-new-group.js @@ -47,10 +47,14 @@ NfRegistryCreateNewGroup.prototype = { var self = this; // create new group with any selected users added to the new group this.nfRegistryApi.createNewGroup(null, createNewGroupInput.value, this.nfRegistryService.getSelectedUsers()).subscribe(function (group) { - self.nfRegistryService.groups.push(group); - self.nfRegistryService.filterUsersAndGroups(); - self.nfRegistryService.allUsersAndGroupsSelected = false; - if (self.keepDialogOpen !== true) { + if (!group.error) { + self.nfRegistryService.groups.push(group); + self.nfRegistryService.filterUsersAndGroups(); + self.nfRegistryService.allUsersAndGroupsSelected = false; + if (self.keepDialogOpen !== true) { + self.dialogRef.close(); + } + } else { self.dialogRef.close(); } }); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.html b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.html index 59e8cfd..1028d98 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.html +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.html @@ -19,7 +19,8 @@ limitations under the License. <div fxFlex class="pad-top-md pad-bottom-sm pad-left-md pad-right-md"> <span class="md-card-title">Authorized Users ({{nfRegistryService.users.length + nfRegistryService.groups.length}})</span> <div flex class="push-right-sm" fxLayout="row" fxLayoutAlign="end center"> - <td-chips class="push-right-sm" [items]="nfRegistryService.autoCompleteUsersAndGroups" + <td-chips class="push-right-sm" + [items]="nfRegistryService.autoCompleteUsersAndGroups" (add)="nfRegistryService.usersSearchAdd($event)" (remove)="nfRegistryService.usersSearchRemove($event)"></td-chips> <button class="push-top-sm push-right-sm" color="fds-secondary" mat-raised-button (click)="addUser()"> @@ -31,15 +32,19 @@ limitations under the License. </button> </div> <mat-menu class="fds-primary-dropdown-button-menu" #userActionMenu="matMenu" [overlapTrigger]="false"> - <button mat-menu-item - [disabled]="(nfRegistryService.getSelectedGroups().length === 0) && (nfRegistryService.getSelectedUsers().length === 0)" + <div matTooltip="{{nfRegistryService.disableMultiDeleteAction ? 'Please deselect any non-configurable users or groups to enable multi-delete.': ''}}"> + <button mat-menu-item + [disabled]="((nfRegistryService.getSelectedGroups().length === 0) && (nfRegistryService.getSelectedUsers().length === 0)) || nfRegistryService.disableMultiDeleteAction" (click)="nfRegistryService.deleteSelectedUsersAndGroups()"> - <span>Delete</span> - </button> - <button mat-menu-item [disabled]="(nfRegistryService.getSelectedGroups().length > 0)" + <span>Delete</span> + </button> + </div> + <div matTooltip="{{(nfRegistryService.getSelectedGroups().length > 0) ? 'Only users can be added when creating a new group. Please deselect any groups to enable.': ''}}"> + <button mat-menu-item [disabled]="(nfRegistryService.getSelectedGroups().length > 0)" (click)="createNewGroup()"> - <span>Create new group</span> - </button> + <span>Create new group</span> + </button> + </div> </mat-menu> <div id="nifi-registry-users-administration-list-container-column-header" fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table"> @@ -61,11 +66,12 @@ limitations under the License. </div> </div> <div id="nifi-registry-users-administration-list-container"> - <div [ngClass]="{'selected' : row.checked}" *ngFor="let row of nfRegistryService.filteredUserGroups" + <div [ngClass]="{'nonconfigurable' : row.configurable === false, 'selected-nonconfigurable' : (row.checked === true && row.configurable === false), 'selected' : row.checked === true}" + *ngFor="let row of nfRegistryService.filteredUserGroups" (click)="row.checked = !row.checked;nfRegistryService.determineAllUsersAndGroupsSelectedState(row)"> <div *ngFor="let column of nfRegistryService.userColumns" fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row"> <div class="td-data-table-cell" fxFlex="{{column.width}}"> - <div> + <div class="ellipsis" matTooltip="{{column.format ? column.format(row[column.name]) : row[column.name]}}"> <i class="fa fa-users push-right-sm" aria-hidden="true"></i>{{column.format ? column.format(row[column.name]) : row[column.name]}} </div> </div> @@ -75,7 +81,7 @@ limitations under the License. <button (click)="row.checked = !row.checked;nfRegistryService.executeGroupAction(action, row)" *ngFor="let action of nfRegistryService.userGroupsActions" matTooltip="{{action.tooltip}}" mat-icon-button color="accent" - [disabled]="action.disabled ? '' : null"> + [disabled]="action.disabled(row)"> <i class="{{action.icon}}" aria-hidden="true"></i> </button> <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked" @@ -91,7 +97,7 @@ limitations under the License. <button (click)="nfRegistryService.executeGroupAction(action, row)" *ngFor="let action of nfRegistryService.userGroupsActions" matTooltip="{{action.tooltip}}" mat-menu-item - [disabled]="action.disabled ? '' : null" + [disabled]="action.disabled(row)"> (click)="nfRegistryService.sidenav.toggle()"> <i class="{{action.icon}}" aria-hidden="true"></i> <span>{{action.name}}</span> @@ -110,11 +116,12 @@ limitations under the License. </div> </div> </div> - <div [ngClass]="{'selected' : row.checked}" *ngFor="let row of nfRegistryService.filteredUsers" + <div [ngClass]="{'nonconfigurable' : row.configurable === false, 'selected-nonconfigurable' : (row.checked === true && row.configurable === false), 'selected' : row.checked === true}" + *ngFor="let row of nfRegistryService.filteredUsers" (click)="row.checked = !row.checked;nfRegistryService.determineAllUsersAndGroupsSelectedState(row)"> <div *ngFor="let column of nfRegistryService.userColumns" fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row"> <div class="td-data-table-cell" fxFlex="{{column.width}}"> - <div> + <div class="ellipsis" matTooltip="{{column.format ? column.format(row[column.name]) : row[column.name]}}"> {{column.format ? column.format(row[column.name]) : row[column.name]}} </div> </div> @@ -124,7 +131,7 @@ limitations under the License. <button (click)="row.checked = !row.checked;nfRegistryService.executeUserAction(action, row)" *ngFor="let action of nfRegistryService.usersActions" matTooltip="{{action.tooltip}}" mat-icon-button color="accent" - [disabled]="action.disabled ? '' : null"> + [disabled]="action.disabled(row)"> <i class="{{action.icon}}" aria-hidden="true"></i> </button> <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked" @@ -140,7 +147,7 @@ limitations under the License. <button (click)="nfRegistryService.executeUserAction(action, row)" *ngFor="let action of nfRegistryService.usersActions" matTooltip="{{action.tooltip}}" mat-menu-item - [disabled]="action.disabled ? '' : null" + [disabled]="action.disabled(row)"> (click)="nfRegistryService.sidenav.toggle()"> <i class="{{action.icon}}" aria-hidden="true"></i> <span>{{action.name}}</span> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js index 2cc8ff1..e39a107 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-administration.js @@ -55,7 +55,7 @@ NfRegistryUsersAdministration.prototype = { ngOnInit: function () { var self = this; this.nfRegistryService.inProgress = true; - this.route.params + this.$subscription = this.route.params .switchMap(function (params) { self.nfRegistryService.adminPerspective = 'users'; return new rxjs.Observable.forkJoin( @@ -81,20 +81,25 @@ NfRegistryUsersAdministration.prototype = { this.nfRegistryService.users = this.nfRegistryService.filteredUsers = []; this.nfRegistryService.groups = this.nfRegistryService.filteredUserGroups = []; this.nfRegistryService.allUsersAndGroupsSelected = false; + this.$subscription.unsubscribe(); }, /** * Opens the create new bucket dialog. */ addUser: function () { - this.dialog.open(NfRegistryAddUser); + this.dialog.open(NfRegistryAddUser, { + disableClose: true + }); }, /** * Opens the create new group dialog. */ createNewGroup: function () { - this.dialog.open(NfRegistryCreateNewGroup); + this.dialog.open(NfRegistryCreateNewGroup, { + disableClose: true + }); } }; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js index 9260dc3..31ea559 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/nf-registry-users-adminstration.spec.js @@ -32,9 +32,9 @@ var NfRegistryUsersAdministration = require('nifi-registry/components/administra var NfRegistryAddUser = require('nifi-registry/components/administration/users/dialogs/add-user/nf-registry-add-user.js'); var NfRegistryManageUser = require('nifi-registry/components/administration/users/sidenav/manage-user/nf-registry-manage-user.js'); var NfRegistryManageGroup = require('nifi-registry/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js'); -var NfRegistryBucketPermissions = require('nifi-registry/components/administration/workflow/buckets/permissions/nf-registry-bucket-permissions.js'); +var NfRegistryManageBucket = require('nifi-registry/components/administration/workflow/sidenav/manage-bucket/nf-registry-manage-bucket.js'); var NfRegistryWorkflowAdministration = require('nifi-registry/components/administration/workflow/nf-registry-workflow-administration.js'); -var NfRegistryCreateBucket = require('nifi-registry/components/administration/workflow/dialogs/nf-registry-create-bucket.js'); +var NfRegistryCreateBucket = require('nifi-registry/components/administration/workflow/dialogs/create-bucket/nf-registry-create-bucket.js'); var NfRegistryGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js'); var NfRegistryBucketGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-bucket-grid-list-viewer.js'); var NfRegistryDropletGridListViewer = require('nifi-registry/components/explorer/grid-list/registry/nf-registry-droplet-grid-list-viewer.js'); @@ -73,7 +73,7 @@ describe('NfRegistryUsersAdministration Component', function () { NfRegistryUsersAdministration, NfRegistryManageUser, NfRegistryManageGroup, - NfRegistryBucketPermissions, + NfRegistryManageBucket, NfRegistryAddUser, NfRegistryWorkflowAdministration, NfRegistryCreateBucket, http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.html ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.html b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.html index f9e2138..735dd95 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.html +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.html @@ -17,133 +17,183 @@ limitations under the License. <div fxFill> <div fxLayout="row" fxLayoutAlign="space-between center" class="pad-top-sm pad-bottom-md pad-left-md pad-right-md"> - <span class="md-card-title">{{nfRegistryService.group.identity}}</span> + <span class="md-card-title ellipsis"><i class="fa fa-users push-right-sm" aria-hidden="true"></i>{{nfRegistryService.group.identity}}</span> <button mat-icon-button (click)="closeSideNav()"> <mat-icon color="primary">close</mat-icon> </button> </div> - <div class="pad-bottom-md pad-left-md pad-right-md" flex fxLayoutAlign="start center"> - <mat-input-container flex> - <input #groupnameInput matInput [disabled]="!nfRegistryService.currentUser.resourcePermissions.tenants.canWrite" placeholder="Identity/Group Name" value="{{nfRegistryService.group.identity}}" - [(ngModel)]="_groupname"> - </mat-input-container> - <button [disabled]="nfRegistryService.group.identity === _groupname" - (click)="updateGroupName(groupnameInput.value)" - class="input-button" - color="fds-regular" - mat-raised-button> - Save - </button> - </div> - <div class="pad-bottom-md pad-left-md pad-right-md" flex fxLayout="column" fxLayoutAlign="space-between start"> - <div> + <div class="sidenav-content"> + <div class="pad-bottom-md pad-left-md pad-right-md" flex fxLayoutAlign="start center"> + <mat-input-container flex> + <input #groupnameInput matInput + [disabled]="!nfRegistryService.currentUser.resourcePermissions.tenants.canWrite || !nfRegistryService.group.configurable" + placeholder="Identity/Group Name" + value="{{nfRegistryService.group.identity}}" + [(ngModel)]="_groupname"> + </mat-input-container> + <button [disabled]="nfRegistryService.group.identity === _groupname || !nfRegistryService.group.configurable" + (click)="updateGroupName(groupnameInput.value)" + class="input-button" + color="fds-regular" + mat-raised-button> + Save + </button> + </div> + <div class="pad-bottom-md pad-left-md pad-right-md" flex fxLayout="column" fxLayoutAlign="space-between start"> + <div> <span class="header">Special Privileges - <i matTooltip="Allows a group to manage NiFi Registry users and groups, buckets, proxies, and policies." + <i matTooltip="Additional permissions that allow a user to manage or access certain aspects of the registry." class="pad-left-sm fa fa-question-circle-o help-icon"></i> </span> - </div> - <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [checked]="nfRegistryService.group.resourcePermissions.buckets.canRead && nfRegistryService.group.resourcePermissions.buckets.canWrite && nfRegistryService.group.resourcePermissions.buckets.canDelete" (change)="toggleGroupManageBucketsPrivileges($event)"> - <span class="description">Can manage buckets</span> - </mat-checkbox> - <div flex fxLayout="row" fxLayoutAlign="space-around center"> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canRead" (change)="toggleGroupManageBucketsPrivileges($event, 'read')"> - <span class="description">Read</span> - </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canWrite" (change)="toggleGroupManageBucketsPrivileges($event, 'write')"> - <span class="description">Write</span> - </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canDelete" (change)="toggleGroupManageBucketsPrivileges($event, 'delete')"> - <span class="description">Delete</span> - </mat-checkbox> - </div> - <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [checked]="nfRegistryService.group.resourcePermissions.tenants.canRead && nfRegistryService.group.resourcePermissions.tenants.canWrite && nfRegistryService.group.resourcePermissions.tenants.canDelete" (change)="toggleGroupManageTenantsPrivileges($event)"> - <span class="description">Can manage users</span> - </mat-checkbox> - <div flex fxLayout="row" fxLayoutAlign="space-around center"> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canRead" (change)="toggleGroupManageTenantsPrivileges($event, 'read')"> - <span class="description">Read</span> - </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canWrite" (change)="toggleGroupManageTenantsPrivileges($event, 'write')"> - <span class="description">Write</span> - </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canDelete" (change)="toggleGroupManageTenantsPrivileges($event, 'delete')"> - <span class="description">Delete</span> + </div> + <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [checked]="nfRegistryService.group.resourcePermissions.buckets.canRead && nfRegistryService.group.resourcePermissions.buckets.canWrite && nfRegistryService.group.resourcePermissions.buckets.canDelete" + (change)="toggleGroupManageBucketsPrivileges($event)"> + <span class="description">Can manage buckets<i + matTooltip="Allow a user to manage all buckets in the registry, as well as provide the user access to all buckets from a connected system (e.g., NiFi)." + class="pad-left-sm fa fa-question-circle-o help-icon"></i></span> </mat-checkbox> - </div> - <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [checked]="nfRegistryService.group.resourcePermissions.policies.canRead && nfRegistryService.group.resourcePermissions.policies.canWrite && nfRegistryService.group.resourcePermissions.policies.canDelete" (change)="toggleGroupManagePoliciesPrivileges($event)"> - <span class="description">Can manage policies</span> - </mat-checkbox> - <div flex fxLayout="row" fxLayoutAlign="space-around center"> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.policies.canRead" (change)="toggleGroupManagePoliciesPrivileges($event, 'read')"> - <span class="description">Read</span> + <div flex fxLayout="row" fxLayoutAlign="space-around center"> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canRead" + (change)="toggleGroupManageBucketsPrivileges($event, 'read')"> + <span class="description">Read</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canWrite" + (change)="toggleGroupManageBucketsPrivileges($event, 'write')"> + <span class="description">Write</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.buckets.canDelete" + (change)="toggleGroupManageBucketsPrivileges($event, 'delete')"> + <span class="description">Delete</span> + </mat-checkbox> + </div> + <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [checked]="nfRegistryService.group.resourcePermissions.tenants.canRead && nfRegistryService.group.resourcePermissions.tenants.canWrite && nfRegistryService.group.resourcePermissions.tenants.canDelete" + (change)="toggleGroupManageTenantsPrivileges($event)"> + <span class="description">Can manage users<i + matTooltip="Allow a user to manage all registry users and groups." + class="pad-left-sm fa fa-question-circle-o help-icon"></i></span> </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.policies.canWrite" (change)="toggleGroupManagePoliciesPrivileges($event, 'write')"> - <span class="description">Write</span> + <div flex fxLayout="row" fxLayoutAlign="space-around center"> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canRead" + (change)="toggleGroupManageTenantsPrivileges($event, 'read')"> + <span class="description">Read</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canWrite" + (change)="toggleGroupManageTenantsPrivileges($event, 'write')"> + <span class="description">Write</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.tenants.canDelete" + (change)="toggleGroupManageTenantsPrivileges($event, 'delete')"> + <span class="description">Delete</span> + </mat-checkbox> + </div> + <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [checked]="nfRegistryService.group.resourcePermissions.policies.canRead && nfRegistryService.group.resourcePermissions.policies.canWrite && nfRegistryService.group.resourcePermissions.policies.canDelete" + (change)="toggleGroupManagePoliciesPrivileges($event)"> + <span class="description">Can manage policies<i + matTooltip="Additional permissions that allow a user to manage or access certain aspects of the registry." + class="pad-left-sm fa fa-question-circle-o help-icon"></i></span> </mat-checkbox> - <mat-checkbox class="pad-left-md" [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [(checked)]="nfRegistryService.group.resourcePermissions.policies.canDelete" (change)="toggleGroupManagePoliciesPrivileges($event, 'delete')"> - <span class="description">Delete</span> + <div flex fxLayout="row" fxLayoutAlign="space-around center"> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.policies.canRead" + (change)="toggleGroupManagePoliciesPrivileges($event, 'read')"> + <span class="description">Read</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.policies.canWrite" + (change)="toggleGroupManagePoliciesPrivileges($event, 'write')"> + <span class="description">Write</span> + </mat-checkbox> + <mat-checkbox class="pad-left-md" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [(checked)]="nfRegistryService.group.resourcePermissions.policies.canDelete" + (change)="toggleGroupManagePoliciesPrivileges($event, 'delete')"> + <span class="description">Delete</span> + </mat-checkbox> + </div> + <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" + [checked]="nfRegistryService.group.resourcePermissions.proxy.canWrite" + (change)="toggleGroupManageProxyPrivileges($event)"> + <span class="description">Can proxy user requests<i + matTooltip="Allow a connected system (e.g., NiFi) to process requests of authorized users of that system." + class="pad-left-sm fa fa-question-circle-o help-icon"></i></span> </mat-checkbox> </div> - <mat-checkbox [disabled]="!nfRegistryService.currentUser.resourcePermissions.policies.canWrite" [checked]="nfRegistryService.group.resourcePermissions.proxy.canWrite" (change)="toggleGroupManageProxyPrivileges($event)"> - <span class="description">Can proxy user requests</span> - </mat-checkbox> - </div> - <mat-button-toggle-group name="nifi-registry-manage-group-perspective" class="pad-left-md tab-toggle-group"> - <mat-button-toggle [checked]="manageGroupPerspective === 'membership'" - value="membership" - class="uppercase" - (change)="manageGroupPerspective = 'membership'" - i18n="User membership tab, group management sidenav|View the users that belong to this group.@@nf-admin-group-management-sidenav-membership-tab-title"> - Membership - </mat-button-toggle> - </mat-button-toggle-group> - <div *ngIf="manageGroupPerspective === 'membership'"> - <div *ngIf="nfRegistryService.group.users" fxFlex class="pad-top-md pad-bottom-sm pad-left-md pad-right-md"> - <div flex fxLayout="row" fxLayoutAlign="space-between center"> - <span class="md-card-title">Membership ({{nfRegistryService.group.users.length}})</span> - <button color="fds-secondary" - [disabled]="!nfRegistryService.currentUser.resourcePermissions.tenants.canWrite" - mat-raised-button - (click)="addUsersToGroup()"> - Add Users - </button> - </div> - <div id="nifi-registry-group-membership-list-container-column-header" fxLayout="row" - fxLayoutAlign="space-between center" class="td-data-table"> - <div class="td-data-table-column" (click)="sortUsers(column)" - *ngFor="let column of nfRegistryService.userGroupsColumns" - fxFlex="{{column.width}}"> - {{column.label}} - <i *ngIf="column.active && column.sortable && column.sortOrder === 'ASC'" class="fa fa-caret-up" - aria-hidden="true"></i> - <i *ngIf="column.active && column.sortable && column.sortOrder === 'DESC'" class="fa fa-caret-down" - aria-hidden="true"></i> + <mat-button-toggle-group name="nifi-registry-manage-group-perspective" class="pad-left-md tab-toggle-group"> + <mat-button-toggle [checked]="manageGroupPerspective === 'membership'" + value="membership" + class="uppercase" + (change)="manageGroupPerspective = 'membership'" + i18n="User membership tab, group management sidenav|View the users that belong to this group.@@nf-admin-group-management-sidenav-membership-tab-title"> + Membership + </mat-button-toggle> + </mat-button-toggle-group> + <div *ngIf="manageGroupPerspective === 'membership'"> + <div *ngIf="nfRegistryService.group.users" class="pad-top-md pad-bottom-sm pad-left-md pad-right-md"> + <div flex fxLayout="row" fxLayoutAlign="space-between center"> + <span class="md-card-title">Membership ({{nfRegistryService.group.users.length}})</span> + <button color="fds-secondary" + [disabled]="!nfRegistryService.currentUser.resourcePermissions.tenants.canWrite || !nfRegistryService.group.configurable" + mat-raised-button + (click)="addUsersToGroup()"> + Add Users + </button> </div> - </div> - <div id="nifi-registry-group-membership-list-container"> - <div fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row" - [ngClass]="{'selected' : row.checked}" *ngFor="let row of filteredUsers" - (click)="row.checked = !row.checked"> - <div class="td-data-table-cell" *ngFor="let column of nfRegistryService.userGroupsColumns" + <div id="nifi-registry-group-membership-list-container-column-header" fxLayout="row" + fxLayoutAlign="space-between center" class="td-data-table"> + <div class="td-data-table-column" (click)="sortUsers(column)" + *ngFor="let column of nfRegistryService.userGroupsColumns" fxFlex="{{column.width}}"> - <div matTooltip="{{column.format ? column.format(row[column.name]) : row[column.name]}}"> - {{column.format ? column.format(row[column.name]) : row[column.name]}} - </div> + {{column.label}} + <i *ngIf="column.active && column.sortable && column.sortOrder === 'ASC'" class="fa fa-caret-up" + aria-hidden="true"></i> + <i *ngIf="column.active && column.sortable && column.sortOrder === 'DESC'" + class="fa fa-caret-down" + aria-hidden="true"></i> </div> - <div class="td-data-table-cell"> - <div> - <button (click)="removeUserFromGroup(row);row.checked = !row.checked;" - matTooltip="'Remove user from group'" mat-icon-button color="accent" - *ngIf="nfRegistryService.currentUser.resourcePermissions.tenants.canWrite"> - <i class="fa fa-minus-circle" aria-hidden="true"></i> - </button> + </div> + <div id="nifi-registry-group-membership-list-container"> + <div fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row" + [ngClass]="{'selected' : row.checked}" *ngFor="let row of filteredUsers" + (click)="row.checked = !row.checked"> + <div class="td-data-table-cell" *ngFor="let column of nfRegistryService.userGroupsColumns" + fxFlex="{{column.width}}"> + <div class="ellipsis" + matTooltip="{{column.format ? column.format(row[column.name]) : row[column.name]}}"> + {{column.format ? column.format(row[column.name]) : row[column.name]}} + </div> + </div> + <div class="td-data-table-cell"> + <div> + <button (click)="removeUserFromGroup(row);row.checked = !row.checked;" + [disabled]="!nfRegistryService.group.configurable" + matTooltip="'Remove user from group'" mat-icon-button color="accent"> + <i class="fa fa-minus-circle" aria-hidden="true"></i> + </button> + </div> </div> </div> </div> - </div> - <div class="mat-padding" *ngIf="nfRegistryService.group.users.length === 0" layout="row" - layout-align="center center"> - <h3>This group does not have any users yet.</h3> + <div class="mat-padding" *ngIf="nfRegistryService.group.users.length === 0" layout="row" + layout-align="center center"> + <h3>This group does not have any users yet.</h3> + </div> </div> </div> </div> http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/6c48025c/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js index a519887..9aaa684 100644 --- a/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js +++ b/nifi-registry-web-ui/src/main/webapp/components/administration/users/sidenav/manage-group/nf-registry-manage-group.js @@ -66,7 +66,7 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.sidenav.open(); // subscribe to the route params - self.route.params + this.$subscription = self.route.params .switchMap(function (params) { return self.nfRegistryApi.getUserGroup(params['groupId']); }) @@ -82,6 +82,7 @@ NfRegistryManageGroup.prototype = { */ ngOnDestroy: function () { this.nfRegistryService.sidenav.close(); + this.$subscription.unsubscribe(); }, /** @@ -105,14 +106,14 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.BUCKETS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, self.nfRegistryService.group.users, []).subscribe( function (response) { // can manage buckets privileges created and granted!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -127,7 +128,7 @@ NfRegistryManageGroup.prototype = { // can manage buckets privileges updated!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -146,7 +147,7 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.BUCKETS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current group and update it @@ -157,7 +158,7 @@ NfRegistryManageGroup.prototype = { policy.resource, policy.users, policy.userGroups).subscribe( function (response) { // can manage buckets privileges updated!!!...now update the view - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); }); @@ -167,7 +168,6 @@ NfRegistryManageGroup.prototype = { }); } } - } }, @@ -185,14 +185,14 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.TENANTS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, self.nfRegistryService.group.users, []).subscribe( function (response) { // can manage tenants privileges created and granted!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -207,7 +207,7 @@ NfRegistryManageGroup.prototype = { // can manage tenants privileges updated!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -226,7 +226,7 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.TENANTS_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current group and update it @@ -237,7 +237,7 @@ NfRegistryManageGroup.prototype = { policy.resource, policy.users, policy.userGroups).subscribe( function (response) { // can manage tenants privileges updated!!!...now update the view - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); }); @@ -247,7 +247,6 @@ NfRegistryManageGroup.prototype = { }); } } - } }, @@ -265,14 +264,14 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.POLICIES_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, self.nfRegistryService.group.users, []).subscribe( function (response) { // can manage policies privileges created and granted!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -287,7 +286,7 @@ NfRegistryManageGroup.prototype = { // can manage policies privileges updated!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -306,7 +305,7 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.POLICIES_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current group and update it @@ -317,7 +316,7 @@ NfRegistryManageGroup.prototype = { policy.resource, policy.users, policy.userGroups).subscribe( function (response) { // can manage policies privileges updated!!!...now update the view - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); }); @@ -327,7 +326,6 @@ NfRegistryManageGroup.prototype = { }); } } - } }, @@ -345,14 +343,14 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.PROXY_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist, let's create it self.nfRegistryApi.postPolicyActionResource(action, resource, self.nfRegistryService.group.users, []).subscribe( function (response) { // can manage proxy privileges created and granted!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -367,7 +365,7 @@ NfRegistryManageGroup.prototype = { // can manage proxy privileges updated!!!...now update the view response.userGroups.forEach(function (group) { if (group.identifier === self.nfRegistryService.group.identifier) { - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); } @@ -386,7 +384,7 @@ NfRegistryManageGroup.prototype = { this.nfRegistryService.PROXY_PRIVS[resource].forEach(function (action) { if (!policyAction || (action === policyAction)) { self.nfRegistryApi.getPolicyActionResource(action, resource).subscribe(function (policy) { - if (policy.status && policy.status === 409) { + if (policy.status && policy.status === 404) { // resource does NOT exist } else { // resource exists, let's filter out the current group and update it @@ -397,7 +395,7 @@ NfRegistryManageGroup.prototype = { policy.resource, policy.users, policy.userGroups).subscribe( function (response) { // can manage proxy privileges updated!!!...now update the view - self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function(response) { + self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier).subscribe(function (response) { self.nfRegistryService.group = response; }); }); @@ -407,7 +405,6 @@ NfRegistryManageGroup.prototype = { }); } } - } }, @@ -418,7 +415,8 @@ NfRegistryManageGroup.prototype = { var self = this; this.dialog.open(NfRegistryAddUsersToGroup, { data: { - group: this.nfRegistryService.group + group: this.nfRegistryService.group, + disableClose: true } }).afterClosed().subscribe(function () { self.nfRegistryApi.getUserGroup(self.nfRegistryService.group.identifier) @@ -510,7 +508,7 @@ NfRegistryManageGroup.prototype = { }); var snackBarRef = self.snackBarService.openCoaster({ title: 'Success', - message: 'The user has been removed from the ' + this.nfRegistryService.group.identity + ' group.', + message: 'The user has been removed from the ' + self.nfRegistryService.group.identity + ' group.', verticalPosition: 'bottom', horizontalPosition: 'right', icon: 'fa fa-check-circle-o', @@ -544,7 +542,7 @@ NfRegistryManageGroup.prototype = { color: '#1EB475', duration: 3000 }); - } else if (response.status === 409) { + } else if (response.status === 404) { self._groupname = self.nfRegistryService.group.identity; self.dialogService.openConfirm({ title: 'Error',
