[中文](README-CN.md) [English](README.md) ## 紹介 Wolfは、すべてのHTTPアプリケーションに適した汎用のロールベースアクセス制御(RBAC)権限システムであり、統一された認可とアクセス制御機能を提供します。 企業内では、さまざまなバックエンドサービスとそれに対応する管理インターフェースが異なるアカウントシステムと権限モジュールを持つことが一般的です。この冗長性はリソースの浪費と管理の混乱を引き起こし、特に異なるチームがこれらのシステムを開発する場合に問題が顕著になります。Wolfは、既存のシステムに変更を加えることなく、さまざまなプラットフォームやシステム全体で統一されたアカウントと認可管理を実現します。 ## 特徴 Wolfシステムには以下の主な特徴があります: ### 1. 汎用性と柔軟性 * 言語非依存:純粋な静的Webページ、JSP、PHP、ASP、Python、Node.jsなど、あらゆるHTTPアプリケーションに適用可能 * 低結合&非侵入型:新しいアプリケーションを変更なしに統合でき、プロキシ層でリソース権限を管理 * Restfulインターフェースとバックエンドでレンダリングされた純粋なHTMLアプリケーションの両方をサポート ### 2. 多様な認証と認可 * 認証ソース: - パスワード認証:内部に保存されたユーザー名とパスワードを使用 - LDAP認証:外部LDAPサーバーを通じたユーザー認証 * 認証プロトコル: - JWT(JSON Web Token):アクセストークンの生成と検証用 - HTTP Basic認証:ユーザー名とパスワードによる基本認証をサポート * 認可プロトコル: - OAuth 2.0:他のアプリケーションでWolfアカウントを使用したログインと認可をサポート ### 3. 包括的な管理機能 * 内蔵の管理コンソール(consoleモジュール):アプリケーション、ユーザー、ロール、権限、リソースを管理 * アクセスログの記録と照会をサポートし、監査と問題追跡を容易に * アプリケーションのRBACオブジェクト関係図の表示をサポート ### 4. 高性能とスケーラビリティ * 高性能で複雑なURL照合のための高度なradixtreeルーティングをサポート * PostgreSQLとMySQLデータベースと互換性あり * [APISIXゲートウェイ](https://github.com/apache/apisix/blob/master/docs/en/latest/plugins/wolf-rbac.md)との統合をサポート ### 5. システムアーキテクチャ * 3つの主要モジュール: - Wolf-Server:サービス実装とバックエンド管理機能 - Wolf-Console:管理コンソール用フロントエンドコード - Wolf-Agent:RBACアクセスチェックプロキシ ### 6. コアエンティティオブジェクト * アプリケーション:複数のアプリケーションをサポートし、それぞれに異なる権限、ロール、リソースを持つ。各アプリケーションのRBACオブジェクト関係図の表示が可能。 * ユーザー:システム全体で共有。ユーザー固有の認可には以下が含まれる: - 管理者権限:管理者に設定されたユーザーは`Console`バックエンドにログインしてアプリケーション管理が可能。 - アプリケーションリスト:ユーザーは0から複数のアプリケーションに割り当て可能。ユーザータイプによって意味が異なる: * 管理者ユーザーの場合、管理可能なアプリケーションを示す。 * 非管理者ユーザーの場合、ログインして使用可能なアプリケーションを示す。 - ロール:ユーザーは複数のロールを割り当てられ、全てのロールから権限を累積。 - 権限:直接の権限割り当ても可能で、典型的なRBACモデルから逸脱。 * ロール:一連の権限を含むことができる。 * 権限カテゴリ:管理を容易にするための権限のカテゴリ化(グループ化)方法で、通常は主要な機能モジュールに合わせている。システムの権限選択ボックスでは、権限はカテゴリごとにグループ化して表示される。 * 権限:リソースと1対多の関係を持つ。1つのリソースに1つの権限を割り当てるか、複数のリソースが同じ権限を共有できる。 * リソース:主にHTTPリクエストを指す。リソースは`マッチタイプ`+`名前`+`アクション`の組み合わせで一意に識別される。主な属性は以下の通り: - マッチタイプ: * `radixtree`ルーティングなし:URLマッチング方法には`完全一致`、`サフィックス一致`、`プレフィックス一致`がある。 * `radixtree`ルーティングあり:`radixtree`モードをサポートし、名前の構文を通じて`完全一致`、`サフィックス一致`、`プレフィックス一致`を実装。 - 名前:HTTPのURLを指す。 * `radixtree`ルーティングなし:`完全一致`と`プレフィックス一致`の場合、通常は`/`で始まる。`サフィックス一致`の場合、通常は`.jpg`、`.js`などの共通リソースサフィックス。*ワイルドカードや正規表現はサポートされていない*。 * `radixtree`ルーティングあり:デフォルトは完全一致。プレフィックス一致には`*`を使用:`/foo*`は`/foobar`にマッチするが`/foo/bar`にはマッチしない。任意のマッチには`**`を使用:`/foo**`は`/foo/bar`と`/foo/car/far`にマッチする。サフィックス一致には`**`を使用:`**.jpg`は`/images/photo.jpg`と`/uploads/profile.jpg`にマッチする。 - アクション:HTTPメソッドを指す。`ALL`は全てのメソッドにマッチする。 - 権限:リソースにアクセスするために必要な権限を示す。2つの組み込み権限がある:`Allow All`は全てのユーザーがアクセス可能、`Deny All`は全てのユーザーがアクセス不可。 * 監査ログ:システム(`Wolf-Console`とシステムで管理されるアプリケーションを含む)を通じた全てのアクセスを記録。主な記録情報: - ユーザーID、ユーザー名、ユーザーニックネーム - アクセス日時とアクセス元のIP - HTTPメソッドとURL - マッチしたリソース - アクセス応答のステータスコード - リクエストパラメータまたはリクエストボディ(`Wolf-Console`の記録のみサポート) ### 7. その他の特徴 * 90%以上のコードカバレッジを持つ広範なテストケース * リソースマッチングは異なる優先順位ルールをサポート: - `マッチタイプ`の優先順位(高から低):完全一致、サフィックス一致、プレフィックス一致 - アクション(HTTPメソッド)の優先順位:ALLは低い優先順位、他のメソッド(GET、POST、PUTなど)は同等の優先順位だがALLより高い - 名前(HTTP URL)の優先順位はURL長に関 ## アーキテクチャ ![アーキテクチャ](./docs/imgs/architecture.png) ## 関係 ![関係](./docs/imgs/data-model.png) ## 技術 - **サーバー**: NodeJS, KOA, Sequelize, JWT - **コンソール**: VueJS, Element, Babel, NodeJS - **エージェント**: OpenResty(ngx_lua) - **データベース**: PostgreSQL. - **キャッシュ**: Redis ## はじめに [はじめに](./quick-start-with-docker/README.md) ## プレビュー #### コンソール | ![アプリケーションリスト](./docs/imgs/screenshot/console/application.png) | |:--:| | *アプリケーションリスト* | | ![アプリケーションリスト](./docs/imgs/screenshot/console/application-diagram.png) | |:--:| | *アプリケーション、ユーザー、ロール、権限の関係* | | ![ユーザー管理](./docs/imgs/screenshot/console/user.png) | |:--:| | *ユーザー管理* | | ![ロール管理](./docs/imgs/screenshot/console/role.png) | |:--:| | *ロール管理* | | ![ロールの権限の詳細](./docs/imgs/screenshot/console/permission-detail.png) | |:--:| | *ロールの権限の詳細/権限のグループ表示* | | ![権限管理](./docs/imgs/screenshot/console/permission.png) | |:--:| | *権限管理* | | ![監査ログ](./docs/imgs/screenshot/console/audit-log.png) | |:--:| | *監査ログ* | #### クライアント/デモ | ![クライアントログイン](./docs/imgs/screenshot/client/login.png) | |:--:| | *クライアントログイン* | | ![メインページ](./docs/imgs/screenshot/client/main.png) | |:--:| | *メインページ (注: 上部に情報バーを追加)* | | ![権限なしページ](./docs/imgs/screenshot/client/no-permission.png) | |:--:| | *権限なしページ* | ## デプロイ [デプロイドキュメント](./docs/deploy.md) [LDAP構成](./docs/ldap-config.md) [APIドキュメント](./docs/admin-api.md) [OAuth2インターフェースドキュメント](./docs/admin-api-oauth2.0.md) ## テスト [サーバーAPIユニットテスト](./docs/unittest.md) ## パフォーマンス [`エージェント` APIパフォーマンステスト](./docs/perf.md) ## マニュアルドキュメント [使用方法](./docs/usage.md) ## 変更履歴 [変更履歴](./ChangeLog.md) ## ライセンス [MIT](./LICENSE)