@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<mat-nav-list>
|
<mat-nav-list>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['journal-entries/frequent-postings']">
|
<mat-list-item *mifosxHasPermission="'CREATE_JOURNALENTRY'" [routerLink]="['journal-entries/frequent-postings']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="sync" size="sm"></fa-icon>
|
<fa-icon icon="sync" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
<p matLine>These are predefined postings</p>
|
<p matLine>These are predefined postings</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['journal-entries/create']">
|
<mat-list-item *mifosxHasPermission="'CREATE_JOURNALENTRY'" [routerLink]="['journal-entries/create']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="plus" size="sm"></fa-icon>
|
<fa-icon icon="plus" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
<p matLine>Manual journal entry transactions recorded in a journal</p>
|
<p matLine>Manual journal entry transactions recorded in a journal</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['journal-entries']">
|
<mat-list-item *mifosxHasPermission="'READ_JOURNALENTRY'" [routerLink]="['journal-entries']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="search" size="sm"></fa-icon>
|
<fa-icon icon="search" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
<p matLine>Advanced search option for journal entries</p>
|
<p matLine>Advanced search option for journal entries</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['financial-activity-mappings']">
|
<mat-list-item *mifosxHasPermission="'READ_FINANCIALACTIVITYACCOUNT'" [routerLink]="['financial-activity-mappings']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="link" size="sm"></fa-icon>
|
<fa-icon icon="link" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
<p matLine>List of Financial Activities and GL Account Mappings</p>
|
<p matLine>List of Financial Activities and GL Account Mappings</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['migrate-opening-balances']">
|
<mat-list-item *mifosxHasPermission="'READ_JOURNALENTRY'" [routerLink]="['migrate-opening-balances']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="hand-holding-usd" size="sm"></fa-icon>
|
<fa-icon icon="hand-holding-usd" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
<mat-nav-list>
|
<mat-nav-list>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['chart-of-accounts']">
|
<mat-list-item *mifosxHasPermission="'READ_GLACCOUNT'" [routerLink]="['chart-of-accounts']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="sitemap" size="sm"></fa-icon>
|
<fa-icon icon="sitemap" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
<p matLine>List of accounts used by the organization</p>
|
<p matLine>List of accounts used by the organization</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['closing-entries']">
|
<mat-list-item *mifosxHasPermission="'READ_GLCLOSURE'" [routerLink]="['closing-entries']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="archive" size="sm"></fa-icon>
|
<fa-icon icon="archive" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<p matLine>Journal entries made at the end of accounting period</p>
|
<p matLine>Journal entries made at the end of accounting period</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['accounting-rules']">
|
<mat-list-item *mifosxHasPermission="'READ_ACCOUNTINGRULE'" [routerLink]="['accounting-rules']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="list" size="sm"></fa-icon>
|
<fa-icon icon="list" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
<p matLine>List of all accounting rules</p>
|
<p matLine>List of all accounting rules</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['periodic-accruals']">
|
<mat-list-item *mifosxHasPermission="'EXECUTE_PERIODICACCRUALACCOUNTING'" [routerLink]="['periodic-accruals']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="calendar" size="sm"></fa-icon>
|
<fa-icon icon="calendar" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<p matLine>Accrues income, expenses and liabilities as on the provided date</p>
|
<p matLine>Accrues income, expenses and liabilities as on the provided date</p>
|
||||||
</mat-list-item>
|
</mat-list-item>
|
||||||
|
|
||||||
<mat-list-item [routerLink]="['provisioning-entries']">
|
<mat-list-item *mifosxHasPermission="'VIEW_PROVISIONING_ENTRIES'" [routerLink]="['provisioning-entries']">
|
||||||
<mat-icon matListIcon>
|
<mat-icon matListIcon>
|
||||||
<fa-icon icon="cogs" size="sm"></fa-icon>
|
<fa-icon icon="cogs" size="sm"></fa-icon>
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { NgModule } from '@angular/core';
|
|||||||
/** Custom Modules */
|
/** Custom Modules */
|
||||||
import { SharedModule } from '../shared/shared.module';
|
import { SharedModule } from '../shared/shared.module';
|
||||||
import { AccountingRoutingModule } from './accounting-routing.module';
|
import { AccountingRoutingModule } from './accounting-routing.module';
|
||||||
|
import { DirectivesModule } from '../directives/directives.module';
|
||||||
|
|
||||||
/** Custom Components */
|
/** Custom Components */
|
||||||
import { AccountingComponent } from './accounting.component';
|
import { AccountingComponent } from './accounting.component';
|
||||||
@@ -44,6 +45,7 @@ import { ViewProvisioningJournalEntriesComponent } from './provisioning-entries/
|
|||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
SharedModule,
|
SharedModule,
|
||||||
|
DirectivesModule,
|
||||||
AccountingRoutingModule
|
AccountingRoutingModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/** Angular Imports */
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
/** Custom Directives */
|
||||||
|
import { HasPermissionDirective } from './has-permission/has-permission.directive';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Directives Module
|
||||||
|
*
|
||||||
|
* All custom directives should be declared and exported here.
|
||||||
|
*/
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule
|
||||||
|
],
|
||||||
|
declarations: [HasPermissionDirective],
|
||||||
|
exports: [HasPermissionDirective]
|
||||||
|
})
|
||||||
|
export class DirectivesModule { }
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import { HasPermissionDirective } from './has-permission.directive';
|
||||||
|
|
||||||
|
describe('HasPermissionDirective', () => {
|
||||||
|
it('should create an instance', () => {
|
||||||
|
const directive = new HasPermissionDirective();
|
||||||
|
expect(directive).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/** Angular Imports */
|
||||||
|
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
|
||||||
|
|
||||||
|
/** Custom Services */
|
||||||
|
import { AuthenticationService } from '../../core/authentication/authentication.service';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Has Permission Directive
|
||||||
|
*/
|
||||||
|
@Directive({
|
||||||
|
selector: '[mifosxHasPermission]'
|
||||||
|
})
|
||||||
|
export class HasPermissionDirective {
|
||||||
|
|
||||||
|
/** User Permissions */
|
||||||
|
private userPermissions: any[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts User Permissions from User Credentials
|
||||||
|
* @param {TemplateRef} templateRef Template Reference
|
||||||
|
* @param {ViewContainerRef} viewContainer View Container Reference
|
||||||
|
* @param {AuthenticationService} authenticationService AuthenticationService
|
||||||
|
*/
|
||||||
|
constructor(private templateRef: TemplateRef<any>,
|
||||||
|
private viewContainer: ViewContainerRef,
|
||||||
|
private authenticationService: AuthenticationService) {
|
||||||
|
const savedCredentials = this.authenticationService.getCredentials();
|
||||||
|
this.userPermissions = savedCredentials.permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evaluates the condition to show template.
|
||||||
|
*/
|
||||||
|
@Input()
|
||||||
|
set mifosxHasPermission(permission: any) {
|
||||||
|
if (typeof permission !== 'string') {
|
||||||
|
throw new Error('hasPermission value must be a string');
|
||||||
|
}
|
||||||
|
if (this.hasPermission(permission)) {
|
||||||
|
/** Shows Template */
|
||||||
|
this.viewContainer.createEmbeddedView(this.templateRef);
|
||||||
|
} else {
|
||||||
|
/** Hides Template */
|
||||||
|
this.viewContainer.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if user is permitted.
|
||||||
|
* @param {string} permission Permission
|
||||||
|
* @returns {true}
|
||||||
|
* -`ALL_FUNCTIONS`: user is a Super user.
|
||||||
|
* -`ALL_FUNCTIONS_READ`: user has all read permissions and passed permission is 'read' type.
|
||||||
|
* - User has special permission to access that feature.
|
||||||
|
* @returns {false}
|
||||||
|
* - Passed permission doesn't fall under either of above given permission grants.
|
||||||
|
* - No value was passed to the has permission directive.
|
||||||
|
*/
|
||||||
|
private hasPermission(permission: string) {
|
||||||
|
permission = permission.trim();
|
||||||
|
if (this.userPermissions.includes('ALL_FUNCTIONS')) {
|
||||||
|
return true;
|
||||||
|
} else if (permission !== '') {
|
||||||
|
if (permission.substring(0, 5) === 'READ_' && this.userPermissions.includes('ALL_FUNCTIONS_READ')) {
|
||||||
|
return true;
|
||||||
|
} else if (this.userPermissions.includes(permission)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user