diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersController.java
index 3303a7e66..db8924242 100644
--- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersController.java
+++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersController.java
@@ -71,6 +71,13 @@ public ResponseEntity> getOne(@PathVariable String username) {
return ResponseEntity.ok(findUserOrThrowHttp404(username));
}
+ @PreAuthorize("hasRole('ADMIN')")
+ @Transactional
+ @GetMapping("/role/{rolename}")
+ public ResponseEntity> getUsersWithRole(@PathVariable String rolename) {
+ return ResponseEntity.ok(userRepository.findByRoles_Name(rolename));
+ }
+
@PreAuthorize("hasRole('ADMIN')")
@Transactional
@DeleteMapping("/{username}")
diff --git a/backend/src/main/resources/i18n/messages_en.properties b/backend/src/main/resources/i18n/messages_en.properties
index e6f30bfe3..5ad8870f7 100644
--- a/backend/src/main/resources/i18n/messages_en.properties
+++ b/backend/src/main/resources/i18n/messages_en.properties
@@ -378,11 +378,14 @@ label.nameid-formats-type=NameID Type
label.select-filter-type=Select Filter Type
label.admin=Admin
+label.action-required=Action Required
+label.user-access-request=User Access Request
label.user-maintenance=User Maintenance
label.user-id=UserId
label.email=Email
label.role=Role
label.delete=Delete?
+label.delete-request=Delete Request
message.delete-user-title=Delete User?
message.delete-user-body=You are requesting to delete a user. If you complete this process the user will be removed. This cannot be undone. Do you wish to continue?
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 841137feb..95a0ac1c4 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -183,6 +183,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -525,6 +526,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -922,6 +924,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -1472,6 +1475,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -2807,6 +2811,7 @@
"requires": {
"anymatch": "1.3.2",
"async-each": "1.0.1",
+ "fsevents": "1.2.7",
"glob-parent": "2.0.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -4647,6 +4652,535 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
+ "fsevents": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "2.12.1",
+ "node-pre-gyp": "0.10.3"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "2.3.5"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.3"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "2.3.5"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "2.6.9",
+ "iconv-lite": "0.4.24",
+ "sax": "1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.3",
+ "mkdirp": "0.5.1",
+ "needle": "2.2.4",
+ "nopt": "4.0.1",
+ "npm-packlist": "1.2.0",
+ "npmlog": "4.1.2",
+ "rc": "1.2.8",
+ "rimraf": "2.6.3",
+ "semver": "5.6.0",
+ "tar": "4.4.8"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.5"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.5",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "0.6.0",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "1.1.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.3.5",
+ "minizlib": "1.2.1",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
"fstream": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
@@ -7381,6 +7915,13 @@
"integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
"dev": true
},
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "dev": true,
+ "optional": true
+ },
"nanomatch": {
"version": "1.2.9",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
@@ -11103,6 +11644,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
@@ -11950,6 +12492,7 @@
"anymatch": "2.0.0",
"async-each": "1.0.1",
"braces": "2.3.2",
+ "fsevents": "1.2.7",
"glob-parent": "3.1.0",
"inherits": "2.0.3",
"is-binary-path": "1.0.1",
diff --git a/ui/src/app/user/admin/action/collection.action.ts b/ui/src/app/admin/action/collection.action.ts
similarity index 94%
rename from ui/src/app/user/admin/action/collection.action.ts
rename to ui/src/app/admin/action/collection.action.ts
index 96c2ae937..8c9c3e420 100644
--- a/ui/src/app/user/admin/action/collection.action.ts
+++ b/ui/src/app/admin/action/collection.action.ts
@@ -11,6 +11,7 @@ export enum AdminCollectionActionTypes {
UPDATE_ADMIN_SUCCESS = '[Admin Collection] Update Admin Success',
UPDATE_ADMIN_FAIL = '[Admin Collection] Update Admin Fail',
+ LOAD_NEW_USERS_REQUEST = '[Admin Collection] Load New Users Request',
LOAD_ADMIN_REQUEST = '[Admin Collection] Load Admin Request',
LOAD_ADMIN_SUCCESS = '[Admin Collection] Load Admin Success',
LOAD_ADMIN_ERROR = '[Admin Collection] Load Admin Error',
@@ -51,6 +52,12 @@ export class LoadAdminRequest implements Action {
constructor() { }
}
+export class LoadNewUsersRequest implements Action {
+ readonly type = AdminCollectionActionTypes.LOAD_NEW_USERS_REQUEST;
+
+ constructor() { }
+}
+
export class LoadAdminSuccess implements Action {
readonly type = AdminCollectionActionTypes.LOAD_ADMIN_SUCCESS;
@@ -126,6 +133,7 @@ export type AdminCollectionActionsUnion =
| LoadAdminRequest
| LoadAdminSuccess
| LoadAdminError
+ | LoadNewUsersRequest
| AddAdminRequest
| AddAdminSuccess
| AddAdminFail
diff --git a/ui/src/app/user/admin/admin.component.html b/ui/src/app/admin/admin.component.html
similarity index 100%
rename from ui/src/app/user/admin/admin.component.html
rename to ui/src/app/admin/admin.component.html
diff --git a/ui/src/app/user/admin/admin.component.spec.ts b/ui/src/app/admin/admin.component.spec.ts
similarity index 100%
rename from ui/src/app/user/admin/admin.component.spec.ts
rename to ui/src/app/admin/admin.component.spec.ts
diff --git a/ui/src/app/user/admin/admin.component.ts b/ui/src/app/admin/admin.component.ts
similarity index 100%
rename from ui/src/app/user/admin/admin.component.ts
rename to ui/src/app/admin/admin.component.ts
diff --git a/ui/src/app/user/admin/admin.module.ts b/ui/src/app/admin/admin.module.ts
similarity index 63%
rename from ui/src/app/user/admin/admin.module.ts
rename to ui/src/app/admin/admin.module.ts
index f15e062dc..476575d1b 100644
--- a/ui/src/app/user/admin/admin.module.ts
+++ b/ui/src/app/admin/admin.module.ts
@@ -1,12 +1,12 @@
-import { NgModule, ModuleWithProviders } from '@angular/core';
+import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
-import { ReactiveFormsModule, FormsModule } from '@angular/forms';
+import { FormsModule } from '@angular/forms';
import { StoreModule } from '@ngrx/store';
-import { SharedModule } from '../../shared/shared.module';
-import { I18nModule } from '../../i18n/i18n.module';
+import { SharedModule } from '../shared/shared.module';
+import { I18nModule } from '../i18n/i18n.module';
import { AdminManagementPageComponent } from './container/admin-management.component';
import { AdminComponent } from './admin.component';
import { reducers } from './reducer';
@@ -15,42 +15,36 @@ import { AdminCollectionEffects } from './effect/collection.effect';
import { EffectsModule } from '@ngrx/effects';
import { DeleteUserDialogComponent } from './component/delete-user-dialog.component';
import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
+import { ActionRequiredPageComponent } from './container/action-required.component';
+import { AccessRequestComponent } from './component/access-request.component';
+import { UserManagementComponent } from './component/user-management.component';
@NgModule({
declarations: [
AdminManagementPageComponent,
AdminComponent,
- DeleteUserDialogComponent
+ DeleteUserDialogComponent,
+ UserManagementComponent,
+ ActionRequiredPageComponent,
+ AccessRequestComponent
],
entryComponents: [
DeleteUserDialogComponent
],
imports: [
CommonModule,
+ I18nModule,
+ StoreModule.forFeature('admin', reducers),
+ EffectsModule.forFeature([AdminCollectionEffects]),
FormsModule,
RouterModule,
HttpClientModule,
SharedModule,
I18nModule,
NgbModalModule
- ]
-})
-export class UserAdminModule {
- static forRoot(): ModuleWithProviders {
- return {
- ngModule: RootUserAdminModule,
- providers: [
- AdminService
- ]
- };
- }
-}
-
-@NgModule({
- imports: [
- UserAdminModule,
- StoreModule.forFeature('admin', reducers),
- EffectsModule.forFeature([AdminCollectionEffects]),
],
+ providers: [
+ AdminService
+ ]
})
-export class RootUserAdminModule { }
+export class AdminModule { }
diff --git a/ui/src/app/admin/component/access-request.component.html b/ui/src/app/admin/component/access-request.component.html
new file mode 100644
index 000000000..a9b96b586
--- /dev/null
+++ b/ui/src/app/admin/component/access-request.component.html
@@ -0,0 +1,68 @@
+ There are no new user requests at this time.
UserId | diff --git a/ui/src/app/user/admin/container/admin-management.component.ts b/ui/src/app/admin/component/user-management.component.ts similarity index 60% rename from ui/src/app/user/admin/container/admin-management.component.ts rename to ui/src/app/admin/component/user-management.component.ts index 3cf0b6b2f..79aaacc78 100644 --- a/ui/src/app/user/admin/container/admin-management.component.ts +++ b/ui/src/app/admin/component/user-management.component.ts @@ -1,39 +1,43 @@ -import { Component, ChangeDetectionStrategy } from '@angular/core'; +import { Component, ChangeDetectionStrategy, OnInit } from '@angular/core'; import { Store } from '@ngrx/store'; import { Observable, Subscription } from 'rxjs'; -import * as fromRoot from '../../../app.reducer'; -import * as fromCore from '../../../core/reducer'; +import * as fromRoot from '../../app.reducer'; +import * as fromCore from '../../core/reducer'; import * as fromAdmin from '../reducer'; -import { LoadAdminRequest, UpdateAdminRequest, RemoveAdminRequest } from '../action/collection.action'; +import { UpdateAdminRequest, RemoveAdminRequest } from '../action/collection.action'; import { Admin } from '../model/admin'; -import { LoadRoleRequest } from '../../../core/action/configuration.action'; import { DeleteUserDialogComponent } from '../component/delete-user-dialog.component'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { map } from 'rxjs/operators'; @Component({ - selector: 'admin-management-page', + selector: 'user-management', changeDetection: ChangeDetectionStrategy.OnPush, - templateUrl: './admin-management.component.html', + templateUrl: './user-management.component.html', styleUrls: [] }) -export class AdminManagementPageComponent { +export class UserManagementComponent implements OnInit { users$: Observable
---|