0

権限データをデータベースに保存し、セッション データをメモリ/ファイル システムに保存します。ユーザーごとに処理された形式のアクセス許可をセッション データに保存します。データベースでユーザー権限が変更された後、その権限キャッシュを更新したいと考えています。ユーザーの権限は、役割の権限、ユーザーの追加の権限、および権限の詳細の変更により変更される可能性があります。そのため、ユーザー権限の変更につながる可能性のあるストアド プロシージャが多数あります。そのユーザーのリストを収集することはできますが、どのように返送すればよいですか? (私はすでに戻り値を使用してレコードを送り返しています...)

「あなたが何を尋ねているのか正確にはわかりません。どのように返送すればよいですか?.コード例を明確にして追加してください (たとえそれが機能していない場合でも)。

セッション データをメモリまたはファイル システムに保存し、ユーザー権限をデータベースに保存します。認証ロジックは非常に複雑であるため、認証が成功すると、ユーザーが持つすべてのアクセス許可を収集し、カスタム パーサーで解析して、結果をキャッシュとしてセッションに保存します。その後、そのキャッシュをパーミッション チェックで使用します。問題は、権限の変更、役割の変更、役割の権限の変更、役割のメンバーシップの変更などによって、セッション内のその権限のキャッシュを更新する必要があることです。

REST インターフェイスを使用した簡易バージョン:

POST /sessions {email: "", password: ""}
 -> {token: "qwerty", user: {id: 123}}
 -> sessionStore.create("qwerty", {user: {id: 123}, permissions: "abcd"}) 
POST /roles {name: "administrator", permissions: "efgh"}
 -> {id: 567}
POST /roleMmembership {user: {id: 123}, role: {id: 567}}
 -> {id: 890}
 -> sessionStore.update("qwerty", {user: {id: 123}, permissions: "abcdefgh"}) 

ユーザー 123 をロール 567 に追加した後にわかるように、セッションが更新され、アクセス許可 "efgh" がセッション アクセス許可キャッシュに追加されました。データベース レベルでは、新しいメンバーシップは、メンバーシップを追加するストアド プロシージャを呼び出し、ID を返します。この手順では、どのユーザーが権限を変更したかを確認できますが、ストアド プロシージャは戻り値を 1 つしか持てないため、その情報を返すことはできません。その情報を通知で送信することは、戻り値というよりもイベントに似ている必要があるため、優れたアイデアです。悲しいことに、私のデータベース ドライバーでは通知がサポートされていないため、ドライバーを変更したくありません。回避策が必要です。複数の戻り値、グローバル変数などである可能性があります...一時テーブルを使用することが唯一の可能な解決策だと思いますが、postgresの経験はあまりありません...

4

1 に答える 1