Reputation: 2116
I have a few buttons which are supposed to be enabled or disabled based on the logged in user role. The user role is stored in local storage and I get the value like this
this.userRole = localStorage.getItem('role');
Then I have an if statement which goes through all of the possible user roles and set a variable to true or false. This variable is then appended to each button.
if(this.userRole === 'System Admin') {
this.corporateButtonDisabled = false;
this.dashboardButtonDisabled = false;
this.rolesButtonDisabled = false;
this.templatesButtonDisabled = false;
this.archiveButtonDisabled = false;
this.profileButtonDisabled = false;
} else if (this.userRole === 'CAT Manager') {
this.corporateButtonDisabled = false;
this.dashboardButtonDisabled = false;
this.rolesButtonDisabled = false;
this.templatesButtonDisabled = false;
this.archiveButtonDisabled = false;
this.profileButtonDisabled = false;
} else if (this.userRole === 'HR Admin') {
this.corporateButtonDisabled = true;
this.dashboardButtonDisabled = false;
this.rolesButtonDisabled = false;
this.templatesButtonDisabled = false;
this.archiveButtonDisabled = true;
this.profileButtonDisabled = false;
} else {
this.corporateButtonDisabled = false;
this.dashboardButtonDisabled = false;
this.rolesButtonDisabled = false;
this.templatesButtonDisabled = false;
this.archiveButtonDisabled = false;
this.profileButtonDisabled = false;
}
My HTML is then set like this
<div style="position: absolute; top:0; right: 0;">
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
class="nav-link-btn" [routerLink]="['/dashboard']" > Dashboard
</button>
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
class="nav-link-btn" [routerLink]="['/admin/templates-dashboard']" > Templates
</button>
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
class="nav-link-btn" [routerLink]="['/admin/roles-dashboard']" > Users
</button>
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
class="nav-link-btn" [routerLink]="['/corporate/dashboard']" > Corporates
</button>
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
class="nav-link-btn" [routerLink]="['/archive']" > Archive
</button>
<button
[disabled]="corporateButtonDisabled"
[disabled]="dashboardButtonDisabled"
[disabled]="rolesButtonDisabled"
[disabled]="templatesButtonDisabled"
[disabled]="archiveButtonDisabled"
[disabled]="profileButtonDisabled"
id="name-btn" class="nav-link-btn" [routerLink]="['/my-profile']" >
<span id="circle"></span> {{ name }}
</button>
<button id="logout-btn" (click)="isDialogOpen = true" class="main">Log out</button>
</div>
Something is not working correctly as I can still click on all the buttons when I am logged in as a HR Admin. Any thoughts?
Upvotes: 0
Views: 37
Reputation: 5257
You don't have to use all those directives, you can just chain you conditions like so:
for example the /my-profile
button:
<button
[disabled]="corporateButtonDisabled ||
rolesButtonDisabled ||
dashboardButtonDisabled ||
templatesButtonDisabled ||
archiveButtonDisabled ||
profileButtonDisabled"
id="name-btn" class="nav-link-btn" [routerLink]="['/my-profile']" >
<span id="circle"></span> {{ name }}
</button>
Upvotes: 1