我在 TRAC 有多个项目。我正在使用 mod_wsgi,并且我的 wsgi 脚本文件 TRAC_ENV_PARENT_DIR 变量指向包含所有这些项目的文件夹的文件夹。一些用户可以访问不同的项目。当用户访问 TRAC URL 时,她可以看到包含所有这些项目的列表,但无法访问其中的一些项目。有没有办法只向用户显示该用户有权访问的那些项目?请指教。
2 回答
序言:我厌恶通过默默无闻的安全。您的请求可能会被解读为网站演示中的化妆品。不要以改进访问控制为目标,因为知道有效路径仍会根据其设置授予对每个 Trac 环境的访问权限。当然更好的导航是一个很好的理由。
需要根据用户的权限隐藏文件夹意味着您需要在授予访问权限之前进行身份验证TRAC_ENV_PARENT_DIR
。这可以通过您的 Web 服务器支持的标准机制来完成。这只是前提。
正如您所说,您的 Trac 环境文件夹集合中有一些非公共 Trac 实例。正确识别所有文件夹有多复杂,这取决于您希望在初始实施与维护上花费多少。
我应该是微不足道的,但容易出错,提供公共或私人目录的列表,当然是更容易维护的。零附加配置将需要打开每个 Trac 环境并查找用户权限。)** 这听起来相当麻烦,并且可能对具有大量用户群和频繁访问的应用程序造成性能损失。如果你走这条路,你至少会使用缓存列表。
您不能使用 Trac 自动生成的可用项目列表,但您必须为经过身份验证/非特权以及经过身份验证和特权的用户提供至少两个版本的索引页面。
为了可维护性,您需要整合配置和权限。要访问每个 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,这对我来说就足够了。