因此,我在网站上设置了一些角色/权限,并且在测试当前用户无权查看的页面时,将其重定向到“登录”页面,但是我想显示一条错误消息/页面,指出它们被禁止从查看该页面。
我在Asp.Net Boilerplate .Net Core 2.0 AbpAuthorizationFilter - ChallengeResult / Unauthorized中尝试了该解决方案,但这似乎没有做任何事情。
任何建议都会很棒。
因此,我在网站上设置了一些角色/权限,并且在测试当前用户无权查看的页面时,将其重定向到“登录”页面,但是我想显示一条错误消息/页面,指出它们被禁止从查看该页面。
我在Asp.Net Boilerplate .Net Core 2.0 AbpAuthorizationFilter - ChallengeResult / Unauthorized中尝试了该解决方案,但这似乎没有做任何事情。
任何建议都会很棒。
您可以在auth-route-guard.ts
的{{1}}中更改此行为
angular/src/shared/auth/auth-route-guard.ts
截取所有路由,这是文件
AppRouteGuard
如您所见,如果没有授权用户查看可以在其中设置消息或要显示的页面的页面,则可以使用import { Injectable } from '@angular/core';
import { PermissionCheckerService } from 'node_modules/abp-ng2-module/dist/src/auth/permission-checker.service';
import { AppSessionService } from '../session/app-session.service';
import {
CanActivate,Router,ActivatedRouteSnapshot,RouterStateSnapshot,CanActivateChild
} from '@angular/router';
import { AlertasHelper } from '../helpers/alertas-helper';
@Injectable()
export class AppRouteGuard implements CanActivate,CanActivateChild {
constructor(
private _permissionChecker: PermissionCheckerService,private _router: Router,private _sessionService: AppSessionService,) { }
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean {
if (!this._sessionService.user) {
this._router.navigate(['/account/login']);
return false;
}
if (!route.data || !route.data['permission']) {
return true;
}
if (this._permissionChecker.isGranted(route.data['permission'])) {
return true;
}
this._router.navigate([this.selectBestRoute()]);
return false;
}
canActivateChild(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): boolean {
return this.canActivate(route,state);
}
selectBestRoute(): string {
if (!this._sessionService.user) {
return '/account/login';
}
if (this._permissionChecker.isGranted('Pages.Users')) {
return '/app/admin/users';
}
AlertasHelper.show('Usuario no tiene autorización','Sin autorización');
return '/dashboard/analytics';
}
}
方法
查看此
selectBestRoute()
如果未定义 if (!this._sessionService.user) {
return '/account/login';
}
,则将返回/ account / login。
_sessionService.user
方法中调用 selectBestRoute()
方法
这是一个例子
canActivate()
在调用{
path: 'country',data: { permission: 'Aplicacion.Generales.Country' },canActivate: [AppRouteGuard],loadChildren: () => import('./country/country.module').then(module => module.CountryModule)
},
之前,将在[AppRouteGuard]上进行验证
我希望它能对您有所帮助。