From ed94d7492d35e87b66fc8ca95258c03a1f09744a Mon Sep 17 00:00:00 2001 From: Jonathan Zhang <41968151+jonathanzhang53@users.noreply.github.com> Date: Sat, 8 Dec 2018 13:25:18 -0600 Subject: [PATCH] feat: add roles and permissions component (#342) Fixes #175 --- .../roles-and-permissions.component.html | 49 ++++++++++++++ .../roles-and-permissions.component.scss | 15 +++++ .../roles-and-permissions.component.spec.ts | 25 +++++++ .../roles-and-permissions.component.ts | 65 +++++++++++++++++++ .../roles-and-permissions.resolver.ts | 30 +++++++++ src/app/system/system-routing.module.ts | 11 ++++ src/app/system/system.component.html | 4 +- src/app/system/system.module.ts | 4 +- src/app/system/system.service.ts | 7 ++ 9 files changed, 207 insertions(+), 3 deletions(-) create mode 100644 src/app/system/roles-and-permissions/roles-and-permissions.component.html create mode 100644 src/app/system/roles-and-permissions/roles-and-permissions.component.scss create mode 100644 src/app/system/roles-and-permissions/roles-and-permissions.component.spec.ts create mode 100644 src/app/system/roles-and-permissions/roles-and-permissions.component.ts create mode 100644 src/app/system/roles-and-permissions/roles-and-permissions.resolver.ts diff --git a/src/app/system/roles-and-permissions/roles-and-permissions.component.html b/src/app/system/roles-and-permissions/roles-and-permissions.component.html new file mode 100644 index 000000000..8f619c4b1 --- /dev/null +++ b/src/app/system/roles-and-permissions/roles-and-permissions.component.html @@ -0,0 +1,49 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Name {{ role.name }} Description {{ role.description }} Status +
+ +
+
+ + + +
+ +
diff --git a/src/app/system/roles-and-permissions/roles-and-permissions.component.scss b/src/app/system/roles-and-permissions/roles-and-permissions.component.scss new file mode 100644 index 000000000..49a7efc0c --- /dev/null +++ b/src/app/system/roles-and-permissions/roles-and-permissions.component.scss @@ -0,0 +1,15 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} + +.true { + color: #32cd32; +} + +.false { + color: #f44366; +} diff --git a/src/app/system/roles-and-permissions/roles-and-permissions.component.spec.ts b/src/app/system/roles-and-permissions/roles-and-permissions.component.spec.ts new file mode 100644 index 000000000..7354825f2 --- /dev/null +++ b/src/app/system/roles-and-permissions/roles-and-permissions.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RolesAndPermissionsComponent } from './roles-and-permissions.component'; + +describe('RolesAndPermissionsComponent', () => { + let component: RolesAndPermissionsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RolesAndPermissionsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RolesAndPermissionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/system/roles-and-permissions/roles-and-permissions.component.ts b/src/app/system/roles-and-permissions/roles-and-permissions.component.ts new file mode 100644 index 000000000..a8c6917f5 --- /dev/null +++ b/src/app/system/roles-and-permissions/roles-and-permissions.component.ts @@ -0,0 +1,65 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +/** rxjs Imports */ +import { of } from 'rxjs'; + +/** + * Roles and Permissions component. + */ +@Component({ + selector: 'mifosx-roles-and-permissions', + templateUrl: './roles-and-permissions.component.html', + styleUrls: ['./roles-and-permissions.component.scss'] +}) +export class RolesAndPermissionsComponent implements OnInit { + + /** Role data. */ + roleData: any; + /** Columns to be displayed in roles and permissions table. */ + displayedColumns: string[] = ['name', 'description', 'disabled']; + /** Data source for roles and permissions table. */ + dataSource: MatTableDataSource; + + /** Paginator for roles and permissions table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for roles and permissions table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the roles data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { roles: any }) => { + this.roleData = data.roles; + }); + } + + /** + * Filters data in roles and permissions table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the roles and permissions table. + */ + ngOnInit() { + this.setRoles(); + } + + /** + * Initializes the data source, paginator and sorter for roles and permissions table. + */ + setRoles() { + this.dataSource = new MatTableDataSource(this.roleData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/system/roles-and-permissions/roles-and-permissions.resolver.ts b/src/app/system/roles-and-permissions/roles-and-permissions.resolver.ts new file mode 100644 index 000000000..50895d799 --- /dev/null +++ b/src/app/system/roles-and-permissions/roles-and-permissions.resolver.ts @@ -0,0 +1,30 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { SystemService } from '../system.service'; + +/** + * Roles and Permissions data resolver. + */ +@Injectable() +export class RolesAndPermissionsResolver implements Resolve { + + /** + * @param {SystemService} systemService System service. + */ + constructor(private systemService: SystemService) {} + + /** + * Returns the roles and permissions data. + * @returns {Observable} + */ + resolve(): Observable { + return this.systemService.getRoles(); + } + +} diff --git a/src/app/system/system-routing.module.ts b/src/app/system/system-routing.module.ts index 0bf577b0d..629f19410 100644 --- a/src/app/system/system-routing.module.ts +++ b/src/app/system/system-routing.module.ts @@ -12,11 +12,13 @@ import { CreateCodeComponent } from './codes/create-code/create-code.component'; import { ExternalServicesComponent } from './external-services/external-services.component'; import { ManageDataTablesComponent } from './manage-data-tables/manage-data-tables.component'; import { ManageHooksComponent } from './manage-hooks/manage-hooks.component'; +import { RolesAndPermissionsComponent } from './roles-and-permissions/roles-and-permissions.component'; /** Custom Resolvers */ import { CodesResolver } from './codes/codes.resolver'; import { ManageDataTablesResolver } from './manage-data-tables/manage-data-tables.resolver'; import { ManageHooksResolver } from './manage-hooks/manage-hooks.resolver'; +import { RolesAndPermissionsResolver } from './roles-and-permissions/roles-and-permissions.resolver'; const routes: Routes = [ Route.withShell([ @@ -68,6 +70,14 @@ const routes: Routes = [ }, data: { title: extract('Manage Hooks'), breadcrumb: 'Manage Hooks' }, }, + { + path: 'roles-and-permissions', + component: RolesAndPermissionsComponent, + resolve: { + roles: RolesAndPermissionsResolver + }, + data: { title: extract('Roles and Permissions'), breadcrumb: 'Roles and Permissions' }, + }, ] } ]) @@ -80,6 +90,7 @@ const routes: Routes = [ CodesResolver, ManageDataTablesResolver, ManageHooksResolver, + RolesAndPermissionsResolver ] }) export class SystemRoutingModule { } diff --git a/src/app/system/system.component.html b/src/app/system/system.component.html index e25dc030e..22a4d9de6 100644 --- a/src/app/system/system.component.html +++ b/src/app/system/system.component.html @@ -24,11 +24,11 @@

Codes are used to define drop down values

- + -

Manage Role and Permissions

+

Manage Roles and Permissions

Define or modify roles and associated permissions

diff --git a/src/app/system/system.module.ts b/src/app/system/system.module.ts index 15488e728..639d31d36 100644 --- a/src/app/system/system.module.ts +++ b/src/app/system/system.module.ts @@ -12,6 +12,7 @@ import { CreateCodeComponent } from './codes/create-code/create-code.component'; import { ExternalServicesComponent } from './external-services/external-services.component'; import { ManageDataTablesComponent } from './manage-data-tables/manage-data-tables.component'; import { ManageHooksComponent } from './manage-hooks/manage-hooks.component'; +import { RolesAndPermissionsComponent } from './roles-and-permissions/roles-and-permissions.component'; @NgModule({ imports: [ @@ -24,7 +25,8 @@ import { ManageHooksComponent } from './manage-hooks/manage-hooks.component'; CreateCodeComponent, ExternalServicesComponent, ManageDataTablesComponent, - ManageHooksComponent + ManageHooksComponent, + RolesAndPermissionsComponent ] }) export class SystemModule { } diff --git a/src/app/system/system.service.ts b/src/app/system/system.service.ts index 032add292..6695dafdb 100644 --- a/src/app/system/system.service.ts +++ b/src/app/system/system.service.ts @@ -32,6 +32,13 @@ export class SystemService { return this.http.get('/hooks'); } + /** + * @returns {Observable} Fetches Roles and Permissions + */ + getRoles(): Observable { + return this.http.get('/roles'); + } + /** * @returns {Observable} Fetches Codes. */