8

私は、PHP と MySQL を使用して Web アプリケーションを作成するチームの一員です。アプリケーションには、異なる役割を持つ複数のユーザーがいます。このアプリケーションは、地理的に分散した方法でも使用されます。したがって、次の 2 つのレベルで動作するアクセス制御システムを作成する必要があります。

  1. 特定の php ページのユーザー権限を制御します。つまり、ユーザーの役割に基づいて、特定のページ (またはユーザー インターフェイス要素) へのアクセスを許可または拒否します。たとえば、ユーザーは「学生」ページへのアクセスは許可されているが、「教師」ページへのアクセスは許可されていない場合があります。
  2. 特定のデータベース レコードに対するユーザー権限を制御します。つまり、特定のレコードのみが表示されるようにデータベース クエリを変更します。たとえば、都市レベルのユーザーの場合、ユーザーの特定の都市に関連するレコードのみを表示する必要がありますが、全国レベルのユーザーの場合、国のすべての都市のレコードを表示する必要があります。

これら両方のタイプのアクセス制御を処理できるシステムの設計について助けが必要です。ポイントNo. 1は簡単そうです。ただし、SQLクエリで情報をハードコーディングせずにポイント2を実行する方法について、私は完全に途方に暮れています。

どんな助けでも大歓迎です。

前もって感謝します

ビナヤク

4

5 に答える 5

12

私も数ヶ月前に同じような状況でした。Zend_ACL のようなツールは、単一の項目 (またはかなり少数の項目) へのアクセス レベルをチェックするだけでうまく機能することがわかりました。ユーザーがアクセスを許可されているアイテムの膨大なリストを取得する必要がある場合、失敗します。Business Delegateパターンを使用して、この問題に対するカスタム ソリューションを作成しました。BD は、特定のコンテキストで適用できるビジネス ロジックを提供します。このシナリオでは、SQL ロジックが配信され、副選択のフィルター条件として使用されました。次の図を参照してください。

代替テキスト
(ソース: epsi.pl )

呼び出し順序を示すシーケンス図:

代替テキスト
(ソース: epsi.pl )

残念ながら、すべてポーランド語ですが、コードと図の一部が便利な場合があります。私が言えることは、実装は簡単なことではありませんが、パフォーマンスの面では、リストの各要素に対する反復的なアクセス チェックと比較するとチャンピオンです。さらに、上記のインフラストラクチャは、リスト上の 1 種類の項目だけを処理するわけではありません。リスト上のアイテムがインターフェイスを実装している限り、都市、国、製品、またはドキュメントのリストなど、さまざまなリストにアクセスするときに使用できIAuthorizableます。

于 2008-11-28T13:50:08.617 に答える
1

問題の詳細についてはわかりませんが、Zend Framework にはかなり強力なACLAUTHのコンポーネントのセットがあります。非常に正確なアクセス制御、永続化のためのデータの保存、高度な条件付きルールなどの優れた機能。

于 2008-10-23T06:07:22.993 に答える
1

必要なものは次のように思えます:(国/州/都市の例を使用します)

  1. すべての国のリスト。それぞれの「国」には ID があります。
  2. 国内のすべての州のリスト。各州は国の ID にバインドされていますが、独自の一意の ID も持っています。
  3. すべての都市のリスト。各都市は、州または国に直接関連付けられており、どちらかを示すフラグがあります。

都市のユーザーの場合、ID に一致する都市に関連するレコードのみを検索して表示することは明らかです。ただし、州または国レベルの場合は、その国 (または州など) に一致する ID を持つ各都市に関連するすべてのレコードを検索します。

したがって、基本的に、各サブグループはその上のグループに依存しています。正確には思い出せませんが、サブクエリを使用してそこからトリックを実行できると思います。

于 2008-10-23T06:10:37.963 に答える
0

これを行う方法がわからない場合は、Zend Framework、CakePHP、または Symfony などの php フレームワークを使用します。彼らはあなたに代わって面倒な作業を行い、何らかのタイプのアクセス制御スキームをすでに導入しています。

于 2008-10-23T18:36:07.507 に答える
0

私は構築する同様のソリューションを持っており、これまでのところ仕様とロールを使用することに決めたので、実際には 1 つのロールにいくつかの特権仕様が添付されます。それらがすべて満たされている場合、アクセス許可が付与されます。それ以外の場合は、リソースのデフォルト アクセスにフォールバックします。

すでにソリューションを実装している人を探していましたが、誰も実装していないようです。失敗しないことを祈りましょう:)

于 2011-01-24T06:27:27.797 に答える