ユーザーがソフトウェア システム内のリソースにアクセスするための高度なアクセス制御を実行することに関心があります。私はヘルスケア IT の仕事をしていますが、若い私は、ヘルスケアにおける役割ベースのアクセス制御の複雑さを過小評価することがよくありました。ただし、この質問は、複雑な ACL 要件を持つすべての人に当てはまるはずです。
かなり長い間、php gaclは、Health IT システム内の非常に複雑な ACL 制御の問題を処理する目的で、私の頼りになるライブラリでした。しかし、私は現在、JavaScript全般とノード固有の作業を行っています。一般化可能な方法で Access Control を行うためのライブラリを npm で検索しました。
ユーザーとリソース (2 層ではなく 3 層) だけでなく、アクションの定義をサポートしたいと考えています。また、ユーザー、アクション、およびリソース グループが必要であり、暗黙のうちに ACL 継承が必要です。
スターウォーズをテーマにしたマニュアルからそのライブラリまでの古典的な例は、次のようなルールです。
- 乗組員のすべてのメンバーは、チューイーを除いて、銃、エンジン、コックピット、およびラウンジに (訪問、構成、および使用) アクセスできます。
- すべてのドロイドはコックピットに (アクセスして使用する) アクセスできますが、R2D2 のみがエンジンへの構成アクセスを持っています。
- Han には、あらゆる種類のリソースへのあらゆる種類のアクセス権があります。
ここでの基本的な概念には、ユーザーのグループ (乗組員、乗客、またはドロイド) または個人 (Han と Chewie) のいずれかに適用されるルールを作成できるという概念が含まれています。 ) またはグループ化することもできるさまざまなリソース (エンジンとコックピット) へのアクセス (メンテナンス アクセス = 構成 + 修理 + 使用) のグループ (バトル ステーション = コックピット + ガン)。
これにより、比較的単純なグループベースの管理で、非常に複雑なアクセス制御ルールを構成できます。
これまでのところ、php-gacl 以外ではこのようなものは見たことがありません。私は素晴らしい JavaScript ベースの ACL プロジェクトを調べましたが、それらはすべて、包括性よりも単純さと使いやすさを宣伝しています。これは、他の典型的な php ACL ライブラリ (つまりZend ACL )にも当てはまります。
ノードの「高度な ACL」プロジェクトに取り組んでいる人はいますか? 私がどこかを探すべきであるより良いアプローチはおそらくありますか?
php-gacl には 3 つの部分があり、1 つは php ベースの管理 GUI (確かに複雑すぎる)、ルールの CRUD 用の API (これは簡単に REST インターフェイスに変換できると思います)、および非常に小さなACL チェック機能を提供するファイル。
技術的には、そのソフトウェア モデルが機能するためには、最後のタイプだけをノードに完全に移植する必要がありますか?
より深いレベルでは、この問題をうまく処理するためにどのようなアプローチが使用されているかを理解したいと思います。この問題は通常どのように解決されますか? ノード/javascript、およびおそらく特定のデータベース アプローチ (リレーショナルと非リレーショナル) の観点から、この問題を効果的に議論する人にとってはボーナス ポイントです。私は、この正しい/間違いを行うための理論的根拠がたくさんあることを理解しています (つまり、RBAC と ACL について多くの意見があります)。私が欲しいのは、ライブラリの観点からまだ「機能する」、理論的に堅実な、またはほぼ堅実なものです。私は Javascript に焦点を当てていますが、他の言語が実際にこの問題をどのように解決しているかを理解したいと思います。