TRAC に複数のプロジェクトがあります。私は mod_wsgi を使用しており、wsgi スクリプト ファイルの TRAC_ENV_PARENT_DIR 変数は、これらすべてのプロジェクトを含むフォルダーを含むフォルダーを指しています。少数のユーザーがさまざまなプロジェクトにアクセスできます。ユーザーが TRAC URL にアクセスすると、これらすべてのプロジェクトを含むリストが表示されますが、一部のプロジェクトにはアクセスできません。このユーザーがアクセスできるプロジェクトのみをユーザーに表示する方法はありますか? お知らせ下さい。
2 に答える
前文: 私は曖昧さによるセキュリティを嫌います。あなたの要求は、Web サイトのプレゼンテーションで化粧品として読み取られる可能性があります。有効なパスを知っていても、設定によっては各 Trac 環境へのアクセスが許可されるため、アクセス制御の改善を目的としないでください。もちろん、より良いナビゲーションは正当な理由です。
ユーザーの許可に応じてフォルダーを非表示にする必要があるということは、へのアクセスを許可する前に認証が必要であることを意味しますTRAC_ENV_PARENT_DIR
。これは、Web サーバーがサポートする標準のメカニズムで実行できます。これはあくまでも前提条件です。
あなたが言うように、あなたの Trac 環境フォルダー コレクションには非公開の Trac インスタンスがいくつかあります。すべてのフォルダーを正しく識別するのがどれほど複雑かは、初期実装とメンテナンスにどれだけの費用をかけたいかによって異なります。
私は些細なことですが、エラーが発生しやすいように、パブリック ディレクトリまたはプライベート ディレクトリのいずれかのリストを提供します。各 Trac 環境を開いてユーザー権限を検索するための追加構成は必要ありません。)** これはやや面倒に聞こえますが、ユーザーベースが大きく頻繁にアクセスするアプリケーションでは、おそらくパフォーマンスが低下することを意味します。この道をたどれば、少なくともキャッシュされたリストで作業できます。
Trac の自動生成されたAvailable プロジェクトリストを使用することはできませんが、認証済み/非特権ユーザーおよび認証済みユーザーと特権ユーザー用に少なくとも 2 つのバージョンのインデックス ページを配信する必要があります。
保守性のために、構成と権限を統合する必要があります。各 Trac 環境へのアクセスには、trac.ini
継承と共有 .htpasswd ファイルを使用できます。ただし、これらの設定は Trac db 内に保存されているため、パーミッションを継承することはできません。TracUserSyncPluginを試してみることもできますが、まだ製品化には適していないようです。または、満足しているすべてのユーザーからのフィードバックが少なくとも不足しているようです (存在する場合)。
)** 私はこれに関する専用のドキュメントを認識していませんが、実際にはいくつかの可能性があります。パーミッションは Trac db に保存されるため、permission
db テーブルの読み取り/クエリが必要になります。その構造は、Trac db schema の他のすべてのテーブルとともに文書化されています。読み取るには、Trac 環境を開き、テーブルに対して直接クエリを使用するか (例については AccountManagerPlugin 変更セットを参照)、またはPermissionCache オブジェクトを構築してクエリを実行します。
古い質問かもしれませんが、これまでのところ、答えは必要なくかなり複雑であることがわかりました。
http://trac.edgewall.org/wiki/TracInterfaceCustomization#ProjectListに記載されている情報を使用して、ユーザーと権限をチェックし、必要なデータを表示するテンプレートを作成できると思います。
私の場合、「TRAC_ENV_INDEX_TEMPLATE」変数を空白の HTML にポイントするだけで十分でした。