1

我在 Apache 中使用 mod_authz_dbd 进行访问控制时遇到问题:

require dbd_group

我有一个 Apache 反向代理,它必须进行身份验证和授权才能让用户访问他们的项目。项目需要一个包含组的 http 标头,用于基于角色的访问控制。目前我想授权用户,如果他们有一个有效的项目组。我将以下 mysql 数据库与我的 apache 服务器一起使用:

 ______________     _________________      __________________
|     User     |   | User's project  |    |      Project     | 
|--------------|   |-----------------|    |------------------|
|PK | id       |_  |PK | id          |   _|PK | id           |
|   | username | \_|FK | user_id     |  / |   | url          |
|   | password |   |FK | project_id  |_/  |   | project name |
|______________|   |   | group       |    |__________________|
                   |_________________|

项目 url 是相对 url,如“/foo”。

每个用户可以在多个项目中工作,并且每个用户可以有不同的组,组是每个项目并且可以采用三个值:

  • 行政
  • pm 项目经理
  • 为开发人员开发

为了实现这一点,我在我的配置文件中写了:

# Get relative url in environment variable.
RewriteRule (.*) - [E=TARGET_URL:$1]
Require dbd-group "admin"
Require dbd-group "pm"
Require dbd-group "dev"
AuthzDBDQuery "SELECT group FROM user, project, users_project WHERE username = %s AND url='%{TARGET_URL}e' AND project.id = users_project.project_id AND user.id = users_project.user_id" 

# Here set the group but how ?
RequestHeader set "X-Forwarded-Groups" "group"  

但我有两个问题:

首先,在 SQL 查询中使用环境变量不起作用。那么,如何在 AuthzDBDQuery 中使用用户名和 url 作为参数进行查询?

其次,如何从 AuthzDBDQuery 中获取组以将其设置在 http 标头中?

我还尝试使用带有 dbd 的 RewriteMap,然后使用 python 脚本使用 prg,但同样的问题,我没有找到如何传递两个参数。

4

0 回答 0