.htpasswd可以有用户组吗,PHP可以读取它们吗?



如果.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参与,那么只需创建你自己的自制组系统。

最新更新