確かなバックエンドのアクセス許可を既に持っています(つまり、管理者はアクションを実行できますが、通常のユーザーはアクションを実行できません)。ただし、単一ページのJavaScriptアプリケーションに対してフロントエンド認証を実行し、APIからビューごとに権限を取得するより良い方法があるかどうか疑問に思っています。
私ができるようです:
a。それがどのようなユーザーであるかを伝えるグローバルな方法がありますか?
b。すべてのビューの権限を確認しますか?
c。ダッシュボード用に別のアプリを作成しますか?
私はcで私の質問に答えたかもしれませんが、誰かがより良いアイデアを考えたら、それを聞きたいです。
それはあなたが「許可」によって何を意味するかによる。ユーザーリソースとプロジェクトリソースの例を使用していくつかのアイデアを紹介します。
権限が特定のプロジェクトから独立している場合は、実際にはユーザーに役割(管理者など)があることを意味しています。これは、そのユーザーのAPI表現でエンコードできます。
権限が基礎となるリソースに依存している場合(たとえば、ユーザーは特定のプロジェクトに対して異なる権限を持つことができる)、これらはそのリソースのAPI表現に常駐できます。これには、ユーザーのすべての権限の巨大な辞書が必要ないという長所と、そのリソースのキャッシュがユーザー固有である必要があるという短所があります。これは許容できるトレードオフです。
誰かがアクションを試みる前にビューをロードし、ビューされたリソースに対する権限を変更した場合、古いデータの潜在的なユーザビリティの問題が依然としてあります。これを軽減する1つの方法は、表示されたリソースに更新をプッシュするためにwebsocketを使用して、UIがバックエンドデータベースで古くなるウィンドウを削減することです。
1つのアプローチは、すべてのユーザーのアクセス許可をローカルストレージに保存し、その周りにラッパーを作成し、ユーザーが実行できることをベースにして表示/非表示にすることです。
それには多くのオプションがあります。私は以下で構成されるアプローチを使用しました:
1つの解決策は、サーバー側で認証トークン(非対称暗号の場合と同様)を生成することです。認証トークンは署名されているため、攻撃者が秘密鍵を知らないため、改ざんできません。
つまり、トークンは次のようになります。
id: userId
type: type of user
privileges: {
privilege1,
privilege2
}
expiry: some time in the near future, after which your app should request a new token
次に、秘密鍵を使用してサーバーでこれに署名します。自由に配布された公開鍵により、誰でもサーバーがトークンを発行したサーバーであることを確認できるため、JavaScriptアプリはトークンを安全に使用して、ユーザーがアクセスできるものを決定できます。