如果.htpasswd
包含joe:password
并且.htaccess
使用基本身份验证并且您以Joe身份登录,则$_SERVER['PHP_AUTH_USER']
/$_SERVER['REMOTE_USER']
/$_ENV['PHP_AUTH_USER']
/$_ENV['REMOTE_USER']
都变成了joe
。
但是,如果您希望您的代码只允许某个组使用某些内容,该怎么办?
即,您能否将用户划分为.htpasswd
内部的组(例如accountant:joe:password
),那么 PHP 抓住了这个组?
mod_authz_groupfile可以为HTTP 基本身份验证提供文件存储后端和组支持的 Apache 模块,但必须在单独的文件中定义组:
admins: amy bill
support: charlie david edward
guests: fernando ivonne
但我相信组是Apache内部的东西,他们不接触PHP,更不用说浏览器了。从 PHP 的角度来看,如果您具有对数据文件的物理访问权限,则始终可以自己获取信息:
$rawGroups = file('/path/to/.htgroup');
$usersByGroup = [];
foreach ($rawGroups as $rawGroup) {
if (!preg_match('/^s*(?P<group>[S]+)s*:s*(?P<users>.+)s*$/', $rawGroup, $matches)) {
continue;
}
$usersByGroup[$matches['group']] = preg_split('/s+/', $matches['users']);
}
演示
如果你真的不需要Apache参与,那么只需创建你自己的自制组系统。