ホームページ >バックエンド開発 >PHPチュートリアル >PHPGACLの使用許可制御
PHPGACL アプリケーション権限制御
パーミッション制御の設計は、システム開発およびフレームワーク構造において常に頻繁に議論される問題であり、高精度を提供できるシンプルかつ効果的なパーミッション制御の粒度をどのように設計するかが、私たちが議論してきた問題です。最近、Joomla の ACL セクションを調べていて、このフレームワーク phpGACL
を発見しました。
存在する
私は個人的な開発プロセスでよくこの問題に直面します。単純な粗い制御と複雑な細かい制御が必要になると、さまざまな非常に複雑な構造とコードの記述に直面することになります。
phpGACL は非常に効果的な権限制御を提供します。つまり、非常に豊富な権限制御を提供でき、開発と設計も非常に簡単です。まずはphpGACLフレームワークを紹介しましょう。
?
この記事は phpGACL ユーザー マニュアルから翻訳されたものです
phpGACL は、任意の (ユーザー、リモート ホスト) オブジェクトが他の (ページ、データベース) オブジェクトにアクセス許可制御を適用できるようにする一連の関数です。 phpGACL は成熟した権限制御とシンプルな管理を提供し、速度も非常に高速です。さらに重要なのは、完全にオープンソースであることです 、次のアドレスから入手できます http://phpgacl.sourceforge.net/
これを実行するには、まずアクセス許可制御データを保存するリレーショナル データベースが必要です。phpGACL は ADODB ライブラリを通じてデータベースに接続するので、簡単に接続できます。 mysql、postgresql、oracleなど。 Joomla の ACL システムには、主に joomla がデータベース層での使用を放棄したため、いくつかの軽量の変更が加えられています。 ADODB は、joomla のデータベース抽象クラスを使用してデータベース
を保存します権限制御について理解する
パーミッション制御を説明する最良の方法は、退屈な概念を説明するのではなく、いくつかの具体的な例を使用することです。ハンはミレニアム ファルコン宇宙船の船長であるチューイは副操縦士であり、宇宙船にはルーク、オビ=ワン、R2D2 などの乗客も乗っています。 ,C3PO.Han は、コックピット、電源キャビン、休憩キャビン、兵器キャビンなど、宇宙船の各キャビンに対するアクセス許可を定義する必要があります。
ハン機長は「チューイと私にはあらゆる場所に入る権利があるが、異例のハイパードライブ修理の後、チューイが再び動力室に近づくことを禁止し、すべての乗客が制限された」と述べた。 「休憩キャビン内です。」 これから議論する許可システムは、実際には、宇宙船に乗っている全員が各キャビンに入る許可を含むものであり、3 番目のケースはありません。
ここで、上記の状況を許可マトリックスとして説明します。これは、誰がどこに入る権利があるのかという質問に対応します。詳細については、次の図で説明します (0 は許可を表し、X は拒否を表します)。
リスト
これは、ハン船長が許可制御を設定する必要があるキャビンを表し、行はキャビンにアクセスする必要がある人を表します。抽象的に言えば、「キャビン」は制御権限を必要とするものであり、ここでは「特権制御オブジェクト」と呼びます。
「Access? Control Objects (ACO)」と同様に、「personnel」はアクセスするために許可が必要なものです。ここではこれを「Permission Requirement Object」と呼びます。
リクエスト
オブジェクト(ARO)。私たちの用語では、職員が客室に入るのに許可が必要であるということは、ARO が ACO にアクセスするのに許可が必要であることを意味します。添付ファイル許可オブジェクト Access と呼ばれる 3 番目のタイプのオブジェクトもあります。
eXtention Object (AXO) は後で説明しますが、いくつかの属性を共有し、一緒に許可オブジェクトを形成します。
1. 彼は細心の注意を払い、必要に応じて全員を管理できます
2. 権限は一目瞭然です。誰がそこに入る権利を持っていますか? 人と小屋の間の交差点を見つけさえすれば、答えは見つかります。
3. 彼にとって、6 人の乗客と 4 つの客室は非常に小さな権限システムを管理するのは困難ですが、数千の乗客と数百の客室がある場合、それを管理するためにマトリックスを適用するのは非常に困難になります。 、これには多大な労力と正確な判断が必要です。権限マトリックスがこのようなシステム管理に適していることは困難です
4. 統計的な問題。上の図が発電室に誰が入ることができるかをカウントする場合は、比較的明らかですが、次のような図の場合は、おそらくさらに問題になるでしょう
権限マトリックスは大規模な権限システムの権限管理には非常に不適切であるため、この作業を完了するには、マトリックスの利点を継承しながら、欠点も捨てなければなりません。 phpGACL は非常に優れたソリューションです。
phpGACL は、ボトムアップでアクセス許可を記述するのではなく、トップダウンの順序でアクセス許可を記述し、ユーザーが多数のグループを使用してアクセス許可を管理できるようにする柔軟なシステムです。 誰がどこに行く許可を持っているかを簡単に知ることができます。 ARO ツリーは、グループと ARO オブジェクトを定義するために phpGACL で使用されます。フォルダーやファイルと同じツリー関係を持ちます。ここで、グループはフォルダーのようなもので、ARO オブジェクトは 書類。
次に、ハンの宇宙船の乗客の ARO ツリー、つまり ARO を設計します。まず、宇宙船の人々の分類を設計します。ここでは、ハンとチューイが船を運転しており、残りは乗客です。 >
ミレニアムファルコン乗客グループ
C─rew???????????????????????????グループ
│─ハン?????????????????????ARO
│─チューイ??????????????????ARO
─乗客???????????????グループ
─オビワン??????????????????ARO
─ルーク????????????????????????ARO
─R2D2????????????????????????ARO
─C3PO????????????????????????ARO
ミレニアムファルコン乗客
─クルー??????????????????[許可:すべて]
│─ハン
チューイ│─
P─アッセンジャー?????????[許可:ラウンジ]
─オビワン
─ルーク
─R2D2
─C3PO
要約すると
アクセス制御オブジェクト (ACO) アクセス制御オブジェクトは、Web ページ、データベース、キャビンなど、アクセスを制御する必要があるオブジェクトです。
アクセス要求オブジェクト (ARO) は、人やリモート コンピューターなど、アクセス許可を必要とするオブジェクトです。
ARO? ツリーは、ARO オブジェクトとグループの階層構造を定義します。グループには、ARO オブジェクトまたは他のグループを含めることができます。
ARO ツリーのデフォルトでは、常にアクセスが拒否されます
権限割り当ての原則。特定のメソッドを使用して ARO ツリー全体を走査し、表示される各 ACO オブジェクトの ARO または GROUP に特定の権限を割り当てます