質問

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

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

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

ご協力いただければ幸いです。

事前に感謝

ビナヤック

役に立ちましたか?

解決

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

 alt text
(ソース: epsi.pl

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

 alt text
(ソース: epsi.pl

このソリューションについてブログに投稿しました、残念ながらすべてポーランド語ですが、コードや図の一部が手元にあるかもしれません。私が言えることは、この実装は簡単なことではありませんが、リスト上の各要素の反復アクセスチェックと比較すると、パフォーマンス面ではチャンピオンです。さらに、上記のインフラストラクチャは、リスト上の1種類のアイテムだけを処理するわけではありません。リストの項目が IAuthorizable インターフェースを実装している限り、都市、国、製品、またはドキュメントのリストであっても、異なるリストにアクセスするときに機能します。

他のヒント

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

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

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

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

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top