私のアプリケーションでは、ユーザーロールに基づいてコンテンツにアクセスできます。役割ごとにルーターガードを作成しました。一部のコンテンツでは、role1、role2、またはrole3にアクセスできます。そのcanActivate宣言をfeature-routing.module.tsファイルにどのように書き込む必要がありますか?私が理解しているように、私が書くなら
canActivate:[Role1Guard, Role2Guard, Role3Guard]
ガードのいずれかがfalseを返すと、アクセスは拒否されます。しかし、私の場合、ガードのいずれかがtrueを返した場合は、アクセスを許可する必要があります。どうやるか?よろしくお願いします!
この場合にできることは、マスターガードを作成することです。これにより、要件に従ってアプリケーションガードがトリガーされます。
チェックアウト this アプローチを理解するための回答。
上記のリンクを通過したと仮定すると、この場合のアプローチは、data
クラスのRoute
プロパティを変更するのと同じくらい簡単です。
このようなもの -
{
path: "view2",
component: View2Component,
//attach master guard here
canActivate: [MasterGuard],
//this is the data object which will be used by
//masteer guard to execute guard1, guard 2, guard 3 & guard 4
data: {
trigger: {
operator: "OR",
guards: [
GUARDS.GUARD1,
GUARDS.GUARD2,
GUARDS.GUARD3,
GUARDS.GUARD4
]
}
}
}
次に、operator
フラグを使用して、それに応じてすべてのガードを起動します。
これがお役に立てば幸いです:)
OrGuard
は、次のように書くことができます。
class OrGuard() {
guards: any[];
constructor(...guards) { this.guards = guards }
canActivate() {
return this.guards.some(Boolean);
}
}
次のように使用します。
canActivate:[new OrGuard(Role1Guard, Role2Guard, Role3Guard)]
...単なるアイデアです。実際の実装は異なる可能性があります。私は試しませんでした(;