4

プロジェクトで angular2 と laravel 5.3 を使用しました。ユーザーがサーバーにログインすると、laravelで、ユーザーの権限がAngularで承認を処理するために送信されます。そこで、アクセスできないユーザーからルートを保護するためのガードを作成しました。ここに私のガードクラスコードがあります:

export class AccessGuard implements CanActivate{

permissions;
currentRoute;
constructor(private authService:AuthService,private router:Router){
    this.permissions = this.authService.getPermissions();
}

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    return this.checkHavePermission(state.url);
}

canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    return this.checkHavePermission(state.url);
}

private checkHavePermission(url){
    switch (true) {
        case url.match(/^\/panel\/users[\/.*]?/):
            return this.getPermission('user.view');
        case url.match(/^\/panel\/dashboard/):
            return true;
        case url.match(/^\/panel\/permissions/):
            return this.getPermission('permissions.manager');
        case url.match(/^\/panel\/candidates[\/.*]?/):
            return this.getPermission('candidate.view');
    }
}


getPermission(perm){
    for(var i=0;i<this.permissions.length;i++){
        if(this.permissions[i].name == perm ){
            return true;
        }
    }
    return false;
}

}

ルートが保護されたので、コンポーネント クラス内のユーザー権限にどのようにアクセスできるのか疑問に思っています。ユーザーがルートにアクセスできる場合がありますが、dom の特定の部分が表示されないことがあります。どうすればこのような状況に対処できますか?

4

3 に答える 3

4

@Dave V 応答に基づいて、コードを少し読みやすくする独自の「can」サービスを実装できます。例えば:

@Injectable()
export class UserCan {

  constructor (private _auth: AuthService)
  {

  }

  public canDoWhatever()
  {
    return (this._auth.roles.indexOf("Whatever") > -1);
  }

}

そして、あなたComponentはそれを注入することができます:

export class YourComponent {
  private canDoWhatever: boolean;

  constructor(private _userCan: UserCan) {
    this.canDoWhatever = _userCan.canDoWhatever();
  }

}

そして最後にあなたのhtmlで:

<div *ngIf="canDoWhatever">
于 2016-10-20T10:03:01.497 に答える