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',

Reply via email to