ホームページ  >  記事  >  バックエンド開発  >  PHPGACLの使用許可制御

PHPGACLの使用許可制御

WBOY
WBOYオリジナル
2016-06-13 13:06:56848ブラウズ

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 は拒否を表します)。


PHPGACLの使用許可制御 リスト これは、ハン船長が許可制御を設定する必要があるキャビンを表し、行はキャビンにアクセスする必要がある人を表します。抽象的に言えば、「キャビン」は制御権限を必要とするものであり、ここでは「特権制御オブジェクト」と呼びます。 「Access? Control Objects (ACO)」と同様に、「personnel」はアクセスするために許可が必要なものです。ここではこれを「Permission Requirement Object」と呼びます。 リクエスト オブジェクト(ARO)。私たちの用語では、職員が客室に入るのに許可が必要であるということは、ARO が ACO にアクセスするのに許可が必要であることを意味します。添付ファイル許可オブジェクト Access と呼ばれる 3 番目のタイプのオブジェクトもあります。 eXtention Object (AXO) は後で説明しますが、いくつかの属性を共有し、一緒に許可オブジェクトを形成します。

権限マトリックスを使用して権限を管理するのは比較的簡単ですが、いくつかの欠点もあります。

1. 彼は細心の注意を払い、必要に応じて全員を管理できます
2. 権限は一目瞭然です。誰がそこに入る権利を持っていますか? 人と小屋の間の交差点を見つけさえすれば、答えは見つかります。
3. 彼にとって、6 人の乗客と 4 つの客室は非常に小さな権限システムを管理するのは困難ですが、数千の乗客と数百の客室がある場合、それを管理するためにマトリックスを適用するのは非常に困難になります。 、これには多大な労力と正確な判断が必要です。権限マトリックスがこのようなシステム管理に適していることは困難です
4. 統計的な問題。上の図が発電室に誰が入ることができるかをカウントする場合は、比較的明らかですが、次のような図の場合は、おそらくさらに問題になるでしょう

PHPGACLの使用許可制御

phpGACL を使用して権限を定義します

権限マトリックスは大規模な権限システムの権限管理には非常に不適切であるため、この作業を完了するには、マトリックスの利点を継承しながら、欠点も捨てなければなりません。 phpGACL は非常に優れたソリューションです。

phpGACL は、ボトムアップでアクセス許可を記述するのではなく、トップダウンの順序でアクセス許可を記述し、ユーザーが多数のグループを使用してアクセス許可を管理できるようにする柔軟なシステムです。 誰がどこに行く許可を持っているかを簡単に知ることができます。 ARO ツリーは、グループと ARO オブジェクトを定義するために phpGACL で使用されます。フォルダーやファイルと同じツリー関係を持ちます。ここで、グループはフォルダーのようなもので、ARO オブジェクトは 書類。

次に、ハンの宇宙船の乗客の ARO ツリー、つまり ARO を設計します。まず、宇宙船の人々の分類を設計します。ここでは、ハンとチューイが船を運転しており、残りは乗客です。 > ミレニアムファルコン乗客グループ
C─rew???????????????????????????グループ
│─ハン?????????????????????ARO
│─チューイ??????????????????ARO
─乗客???????????????グループ
─オビワン??????????????????ARO
─ルーク????????????????????????ARO
─R2D2????????????????????????ARO
─C3PO????????????????????????ARO

このツリーは実際には権限に関連付けられておらず、ARO オブジェクトを分類しているだけです。アクセス許可を適用するとき、実際には、ACO オブジェクト、つまりキャビンを ARO ツリー上のグループまたは ARO オブジェクトに割り当てるだけです。ハン氏は「デフォルトでは、どの部屋にも誰も入ることができないが、乗務員はどの客室にも入ることができ、乗客は休憩室にのみ入ることができる」と述べた

ミレニアムファルコン乗客
─クルー??????????????????[許可:すべて]
│─ハン
チューイ│─
P─アッセンジャー?????????[許可:ラウンジ]
─オビワン
─ルーク
─R2D2
─C3PO

ここでこのツリーを上から下まで説明します。まず、デフォルトの許可は常に拒否されているため、最初は乗務員を含む全員がどの船室にも入ることが拒否されますが、ハン氏は「乗組員はどの船室にも入ることができます」と言いました。 これは、権限が上書きされ、デフォルトの権限の上書きが許可される場合に発生します。そのため、最終的に乗務員はどの客室にも入る権利を持ちますが、乗客はラウンジ キャビンにのみ入ることが許可されます。権限を説明するこの方法は、マトリックスよりも明確であり、次のことを明確に行うことができます。 誰がどこに行けるのか、そしてなぜそのような許可があるのか​​を理解する (ハンとチューイは同じ乗組員の一員であるため、船内のどこにでも行くことができます)

要約すると

アクセス制御オブジェクト (ACO) アクセス制御オブジェクトは、Web ページ、データベース、キャビンなど、アクセスを制御する必要があるオブジェクトです。

アクセス要求オブジェクト (ARO) は、人やリモート コンピューターなど、アクセス許可を必要とするオブジェクトです。
ARO? ツリーは、ARO オブジェクトとグループの階層構造を定義します。グループには、ARO オブジェクトまたは他のグループを含めることができます。
ARO ツリーのデフォルトでは、常にアクセスが拒否されます
権限割り当ての原則。特定のメソッドを使用して ARO ツリー全体を走査し、表示される各 ACO オブジェクトの ARO または GROUP に特定の権限を割り当てます

この記事では、phpGACL の権限制御原則と基本概念について簡単に説明します。GACL 制御原則の詳細については、phpGACL マニュアルを参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。