要在Angular守卫中获取当前用户的角色以检查他/她是否有权限访问受保护的路由,你可以使用服务来管理用户角色和权限,并在守卫中使用该服务。
首先,创建一个名为AuthService
的服务,用于管理用户角色和权限。在该服务中,你可以添加获取当前用户角色的方法,例如getCurrentUserRole()
。
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class AuthService {
private currentUser: any; // 当前用户对象
constructor() { }
setCurrentUser(user: any) {
this.currentUser = user;
}
getCurrentUser() {
return this.currentUser;
}
getCurrentUserRole() {
// 在这里根据实际情况返回当前用户的角色
// 例如,你可以从当前用户对象中获取角色属性
return this.currentUser.role;
}
// 其他操作和检查权限的方法...
}
接下来,在你的守卫中注入AuthService
并使用它来获取当前用户角色。根据用户角色,你可以决定是否允许访问受保护的路由。
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { AuthService } from './auth.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) { }
canActivate(): boolean {
const userRole = this.authService.getCurrentUserRole();
// 根据用户角色执行适当的权限检查
if (userRole === 'admin') {
// 允许管理员访问受保护的路由
return true;
} else {
// 其他角色没有权限,重定向到登录页面或其他页面
this.router.navigate(['/login']);
return false;
}
}
}
最后,在你的路由配置中使用守卫来保护受保护的路由。
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AuthGuard } from './auth.guard';
const routes: Routes = [
{ path: 'protected', component: ProtectedComponent, canActivate: [AuthGuard] },
// 其他路由配置...
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
这样,当用户访问/protected
路由时,守卫将会检查当前用户的角色,并根据角色决定是否允许访问该路由。如果用户角色不符合条件,守卫会重定向到登录页面或其他页面。
请注意,上述代码中的getCurrentUserRole()
方法仅作为示例。你需要根据你的实际需求来实现获取当前用户角色的逻辑。