本文最后更新于166 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com
1. 变量名选择的本质规律
wp_get_current_user() → 赋值给 $current_user 或 $user → 传递给 get_user_level()
差异的原因:
| 变量名 | 使用场景 | 说明 |
|---|---|---|
| $current_user | 强调当前会话用户 | 常用于权限检查、当前操作 |
| $user | 通用用户参数 | 可能被复用、传递给其他函数 |
2. 参数传递的一致性
所有 get_user_level() 调用实际接收的是 WP_User对象,无论变量名叫什么:
// 三种等效写法:
PSG_Security_Helper::get_user_level($current_user);
PSG_Security_Helper::get_user_level($user);
PSG_Security_Helper::get_user_level(wp_get_current_user());
重构原则总结
原则1:变量名应反映语义,而非技术细节
// ✅ 好:明确表示"当前用户级别"
$current_user_level = PSG_Security_Helper::get_user_level(wp_get_current_user());
// ✅ 好:通用场景
$user = get_user_by('id', $user_id);
$user_level = PSG_Security_Helper::get_user_level($user);
// ❌ 避免:混用
$level = PSG_Security_Helper::get_user_level($current_user); // $level 不够明确
原则2:减少全局变量依赖
// ✅ 好:通过函数获取,非全局变量
$current_user = wp_get_current_user();
// ❌ 避免:直接使用全局变量
global $current_user; // 除非必要,否则避免
原则3:参数设计应考虑扩展性
PSG_Security_Helper::get_user_level() 应该支持:
// 多态参数设计:
get_user_level(null); // 当前用户
get_user_level($wp_user_object); // 用户对象
get_user_level(123); // 用户ID
get_user_level('admin@example.com'); // 用户邮箱(可选扩展)
重构建议的具体实现
步骤1:增强统一方法(带向后兼容)
class PSG_Security_Helper {
/**
* 获取用户权限级别(增强版)
*
* @param mixed $user WP_User对象|用户ID|字符串|null
* @return int 用户级别,0表示访客
*/
public static function get_user_level($user = null) {
// 1. 处理默认情况(当前用户)
if (is_null($user)) {
$user = wp_get_current_user();
}
// 2. 处理用户ID
if (is_numeric($user)) {
$user = get_user_by('ID', (int)$user);
}
// 3. 验证用户对象
if (!$user instanceof WP_User || empty($user->roles)) {
return 0; // 访客
}
// 4. 计算最高权限级别
$highest_level = 0;
foreach ((array)$user->roles as $role) {
if (isset(self::$role_levels[$role])) {
$highest_level = max($highest_level, self::$role_levels[$role]);
}
}
return $highest_level;
}
}
步骤2:建立命名约定(可选,但推荐)
/**
* 项目变量命名约定示例:
*
* $current_user - WordPress当前登录用户对象
* $target_user - 操作目标用户(非当前用户)
* $user - 通用用户对象(根据上下文)
* $user_level - 用户权限级别
* $current_level - 当前用户级别(如果上下文明确)
* $required_level - 需要的权限级别
* $minimum_level - 最低要求级别
*/
步骤3:上下文感知的重构策略
情况A:当前用户权限检查
// 原代码:
$current_user = wp_get_current_user();
$user_level = PSG_Security_Helper::get_user_level($current_user);
// 可简化为(但保持变量名明确性):
$current_user_level = PSG_Security_Helper::get_user_level(); // 使用null参数
情况B:特定用户权限检查
// 原代码:
public function check_user_access($user) {
$user_level = PSG_Security_Helper::get_user_level($user);
// ...
}
// 保持原样,$user 来自参数
需要特别注意的上下文
需要具体检查:
1. class-file-browser.php 第467行
// 这个条件判断很重要
if (! function_exists('wp_get_current_user')) {
// 可能需要引入WordPress函数
}
2. 所有调用处的参数来源
需要确保这些情况都正确处理:
- 情况1:用户未登录 → 应该返回0
- 情况2:用户角色不在映射中 → 应该返回0
- 情况3:多角色用户 → 返回最高级别
需要验证的问题:
class-file-browser.php中的特殊判断是否需要保留- 访客用户是否应该返回0(统一标准)




