Added routing by permissions #130

This commit is contained in:
2023-02-16 21:24:29 +01:00
parent e2ef4f3bde
commit f847841582
17 changed files with 260 additions and 26 deletions

View File

@@ -241,6 +241,20 @@ export class AuthService {
return null
}
async getLoggedInUser(): Promise<AuthUserDTO | null> {
if (!await this.isUserLoggedInAsync()) {
return null;
}
const token = this.getDecodedToken();
if (!token) return null;
try {
return await firstValueFrom(this.findUserByEMail(token["email"]));
} catch (error: unknown) {
return null;
}
}
async isUserLoggedInAsync(): Promise<boolean> {
const token = this.getToken();

View File

@@ -4,8 +4,10 @@ import { BehaviorSubject } from "rxjs";
import { AuthRoles } from "../../models/auth/auth-roles.enum";
import { AuthService } from "../auth/auth.service";
import { TranslateService } from "@ngx-translate/core";
import { ActivatedRoute, NavigationEnd, Router } from "@angular/router";
import { NavigationEnd, Router } from "@angular/router";
import { ThemeService } from "../theme/theme.service";
import { Server } from "../../models/data/server.model";
import { UserDTO } from "../../models/auth/auth-user.dto";
@Injectable({
providedIn: "root"
@@ -13,14 +15,14 @@ import { ThemeService } from "../theme/theme.service";
export class SidebarService {
isSidebarOpen: boolean = true;
menuItems$: BehaviorSubject<MenuItem[]> = new BehaviorSubject(new Array<MenuItem>());
serverName$: BehaviorSubject<string> = new BehaviorSubject("");
menuItems$ = new BehaviorSubject<MenuItem[]>(new Array<MenuItem>());
server$ = new BehaviorSubject<Server | null>(null);
constructor(
private themeService: ThemeService,
private authService: AuthService,
private translateService: TranslateService,
private router: Router,
private router: Router
) {
this.themeService.isSidebarOpen$.subscribe(value => {
this.isSidebarOpen = value;
@@ -28,7 +30,7 @@ export class SidebarService {
});
this.serverName$.subscribe(value => {
this.server$.subscribe(value => {
this.setMenu();
});
@@ -40,18 +42,27 @@ export class SidebarService {
}
setMenu() {
this.authService.hasUserPermission(AuthRoles.Admin).then(hasPermission => {
this.authService.hasUserPermission(AuthRoles.Admin).then(async hasPermission => {
let menuItems: MenuItem[] = [
{ label: this.isSidebarOpen ? this.translateService.instant("sidebar.dashboard") : "", icon: "pi pi-th-large", routerLink: "dashboard" }
];
const serverMenu = {
label: this.isSidebarOpen ? this.serverName$.value : "", icon: "pi pi-server", items: [
{ label: this.isSidebarOpen ? this.translateService.instant("sidebar.settings") : "", icon: "pi pi-cog", routerLink: "server/settings" },
{ label: this.isSidebarOpen ? this.translateService.instant("sidebar.members") : "", icon: "pi pi-users", routerLink: "server/members" }
label: this.isSidebarOpen ? this.server$.value?.name : "", icon: "pi pi-server", items: [
{ label: this.isSidebarOpen ? this.translateService.instant("sidebar.profile") : "", icon: "pi pi-user", routerLink: `server/${this.server$.value?.id}/profile` },
// { label: this.isSidebarOpen ? this.translateService.instant("sidebar.members") : "", icon: "pi pi-users", routerLink: "server/members" }
]
};
if (this.serverName$.value != "") {
if (this.server$.value) {
let authUser = await this.authService.getLoggedInUser();
let user: UserDTO | null = authUser?.users?.find(u => u.server == this.server$.value?.id) ?? null;
if (user?.isAdmin) {
serverMenu.items.push(
{ label: this.isSidebarOpen ? this.translateService.instant("sidebar.members") : "", icon: "pi pi-users", routerLink: `server/${this.server$.value?.id}/members` }
);
}
menuItems.push(serverMenu);
} else if (menuItems.find(x => x.icon == "pi pi-server")) {
menuItems.splice(menuItems.indexOf(serverMenu), 1);