x-aclアクセス制御リスト(ACL)軽量ユーティリティ

ご挨拶、Habraコミュニティ!

各プロジェクト(Webプロジェクト)には、アクセス権の整理に関する質問があります。 この領域には、Zend、Symfony、Yiiなどのさまざまなフレームワーク向けの特定の既製ツールがあります。おそらく誰かが何かに出会い、一般にそれが何であるかを想像しています。 出会っていない人のために-これらのフレームワークのいずれかのドキュメントを開いて、自分自身をよく理解することをお勧めします。 特に、この投稿の著者はZend_Aclと非常に密接に協力しました。 しかし、比較的最近、私はC ++の分野でACLの問題を研究することにしました

それで、どこから始まったのか...


それはすべて非常に簡単に始まり、負荷の大きい自己記述プロジェクトがあります(倫理上の理由から、その名前は呼ばれず、歴史的な理由で自己記述され、200Kユニークです)。 プロジェクトは、ほとんどの場合「伝統が指示する」ように、phpで書かれています。 そのようなアクセスリストの編成は存在しないため、どのような「役割」、何をすべきかの場合には、通常の条件演算子があります。 これらの松葉杖のソリューションは、原則として機能しますが、あまり満足していません。 検索と常識を武器に、小さくて軽量なc ++ユーティリティを作成することにしました。これをコミュニティと共有したいと思います。

特権の構成


zendとアクセスリストのイデオロギーをより詳細に分析した後、ユーティリティの要件は非常に簡単であることが明らかでした-権限のリストを取得し、状況に応じて、この構成ファイルがアクセスできるかどうかに答えますシステム管理者を編集します-何が何であるかをナビゲートするのは簡単なはずです。 これらの考慮事項から、使い慣れた構成iniファイルを選択しました。 例:

[guest]
view:news
view:comments

[guest]はユーザーロール、 view:newsおよびview:コメントは対応するリソースです。 多くの人は、たとえば、リソースがコメントではなくビューと呼ばれるのに興味があるかもしれませんが、ビューはコメントではなく、コメント-答えは簡単です.CRUDに従ってリソースを条件付きで分割すると、あまり多くのオプションを考えることができないので、すぐにロールを視覚的に見ることができます誰が見ているのか、誰が更新しているのかなどを分割します。さらに、この形式では次のことが可能になります。

[guest]
view:*

これは、ゲストがすべてを見ることができることを意味します。
シンプルでしょ?

丁寧な読者は、明らかに、コロン記号がリソースの名前に存在することにすでに気づいている。 これは条件付き必須セパレータであり、これらを使用して以下を実行できます。

[moderator]
edit:*:comments

#
edit:news:comments
edit:wall:comments

このユーティリティはリソースのグループ化を強制しません。適切であると判断し、プロジェクトに最適な方法でグループ化できます。 ただし、サブグループ間にコロンがあると、リソースのコンポーネントをより論理的に分離できます。

単純な解決策は面白くありません。明らかに、特定のリソースへのアクセスを拒否することもできます。

[user]
view:news:28 = deny

このルールを使用して、ユーザーがID 28のニュースを表示できないようにしました
個々の役割ごとにルールを記述するのは非常に面倒なので、継承メカニズムがあります。

[user : guest]

この場合、 ユーザーロールには、そのルールに加えて、 ゲストロールからのルールも含まれます。

私の意見では、ユーザーがコメントを編集できる場合のケースを説明する機能が追加機能です。 つまり、彼が直接作成したものだけです。 記号^がこれに使用されます

例:

[user]
edit:comment:^

この場合、コメントIDが^に置き換えられるため、コロンが強制的にサブグループに分割される理由を確認することがより明確になったと思います。

仕組み


前述のように、これはユーティリティです。 したがって、コンパイルが成功したら、コンソールで実行できます。

./x-acl --config x-acl.conf --group guest --resource view:news

ゲストユーザーがビューにアクセスできるかどうかを尋ねます:ニュースリソース

./x-acl --config x-acl.conf --group user --resource edit:comment:28 \
--user-id 4 --owner-id 4

ユーザーロールにedit:comment:28リソースへのアクセス権があるかどうかを尋ねます。誰かが忘れた場合は、ルールedit:comment:^を設定します。この場合、^記号が存在するため、user-id引数とowner-id引数が等しいかどうかがチェックされます。等しい(この例では等しい)-アクセスが許可されます。

ダウンロードしてプレイする場所


github.com/AlexeyParhomenko/x-acl

疑わしい質問のリスト:)


-既製のツールがあるのに、なぜ自転車を再発明するのですか?

著者はいくつかに精通しています。 プロンプトが表示された新しいツールを作成します。
1. aclをニーズにより柔軟にします。
2.この場合、phpとは異なり、バルキーなZval構造が作成されないため、メモリ消費の利益を上げます。
3.スピードで利益を上げます。 テスト中ですが、設定を毎回解析することがストレスになることが判明した場合、ソケットソリューションに切り替えることができます。

-さらにサポートを計画し、バグを修正しますか?

当然。

-どのOSで動作しますか?

著者は作業環境として使用しているので、Debianは当社のサーバーで使用されているため、Debianが正常に動作することを確認します。 他の* nixディストリビューションでも、安定して動作するはずです。

このツールが将来どのように役立つかを理解したいので、コメントは大歓迎です。 または、検索が不十分で、既に説明した機能が利用可能な場合-Googleに送信してください!

私は、PMのテキストまたはソースコードのエラー/不正確性に気づいたこと、またはおそらく、さらなる要望を聞いてうれしく思います。

Source: https://habr.com/ru/post/J155099/


All Articles