私はルートガードを使用して私の角度アプリケーションのフロントエンドを確保するために取り組んでいます。過去にそれらを使って作業し、オンラインで調べる際に、複数のガードをルートに追加するには、すべてがtrueを返してアクセスできるようにする必要があります。角度経路ガード:Or対And
しかし、の1つだけをに戻してアクセスを許可する場合はどうすればよいですか? 例えば
(代わりに& &の||のように)、私のルートガードは、ユーザーのトークンに一定の役割を探します。
@Injectable()
export class ActiveRoleGuard implements CanActivate {
constructor(private sessionService: SessionService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let token = this.sessionService.getToken();
if (!token) {
return false;
}
if (token.role.toLowerCase().indexOf("active") < 0) {
this.router.navigate(["/issue"]);
return false;
}
return true;
}
}
そして
@Injectable()
export class AdminRoleGuard implements CanActivate {
constructor(private sessionService: SessionService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let token = this.appSessionService.getToken();
if (!token) {
return false;
}
if (token.role.toLowerCase().indexOf("admin") < 0) {
this.router.navigate(["/issue"]);
return false;
}
return true;
}
}
私がいた場合それらをルータモジュールで普通に組み合わせると、...
{path: "someroute", component: SomeComponent, canActivate: [ActiveRouteGuard, AdminRouteGuard]}
...しかし、ユーザーにはActive
とAdmin
の両方が必要です。しかし、Active
とのいずれかを適用する場合は、Admin
またはaのいずれかを強制したい場合はどうすればよいですか?
それはそうのようなAPI に強制するために簡単です:
[Authorize(Roles = "Active")]
[Authorize(Roles = "Admin, Manager")]
public class SomeController : ApiController
が、私は角度でこれをどのように行うのですか?
清潔ではないにもかかわらず、両方のケースを管理する単一のガードを実行することはできますが、他の解決策はまだ見つかりません... これは、管理者にとっては、チェックしてください。あなたはあなたのトークンに 'admin'ロールを追加することでそれを修正することができます –
重複する権限を持つ現在6つのロールがあるので、私はむしろ結合しません。しかし、これがAngularでサポートされていない場合はそれが私の最善の選択です –