我正在尝试比较定义的role
(在我的app.ts
中)和从WebServer
起的已恢复角色。但是,当我没有登录时,比较值就会出现问题:
这就是我在做什么:
export class RoutingAuthorizeStep {
public readonly userIdentity: UserIdentityModel;
constructor (userIdentity: UserIdentityModel) {
this.userIdentity = userIdentity;}
run(navigationInstruction: NavigationInstruction, next: Next) : Promise<any> {
let requiredRoles = navigationInstruction.getAllInstructions()
.map(i => i.config.settings.roles)[0] as string[];
//requiredRoles is example 'superUser'
let isUserInRole = requiredRoles?
requiredRoles.some(r => r === this.userIdentity.role) : true;
}
}
当我检查调试时:
console.log(this.userIdentity.role);
我收到此消息:
aurelia-logging-console.js?dc89:45 ERROR [app-router] TypeError:
Cannot read property 'role' of undefined
at RoutingAuthorizeStep.run (routing-authorize-step.ts?008f:30)
at next (aurelia-router.js?e32b:433)
答案 0 :(得分:2)
我不是Aurelia开发人员,但这似乎是一个简单的JS问题,除非我错了。假设错误在“ isUserInRole”中,则可以执行此操作。
let isUserInRole = requiredRoles?
requiredRoles.some(r => this.userIdentity && r === this.userIdentity.role) : true;
}
基本上,只需在检查其角色之前检查userIdentity是否存在。
希望这会有所帮助!
答案 1 :(得分:1)
我为此解决了这个问题:
run(navigationInstruction: NavigationInstruction, next: Next) : Promise<any> {
if (this.userIdentity == null)
{
//return to login
}
else
{
let requiredRoles: string;
requiredRoles = navigationInstruction.getAllInstructions()
.map(i => i.config.settings.roles)[0];
if (requiredRoles === this.userIdentity.role)
{
return next();
}
//return to login
}
}
正在工作。但是requiredRoles.some
还是有问题-也许有些library is missing
。