在开发基于会员权限的内容管理系统时,实现游客、普通会员和VIP会员对不同字段内容的访问控制是一个常见的需求。本文将详细介绍如何通过修改PHP代码来解决您遇到的问题,并确保系统能够正确地根据用户身份显示相应的内容。
首先,我们需要明确三个用户角色及其对应的显示规则:
游客:仅能查看[newstext]字段的内容。
普通会员:登录后只能查看[member]字段的内容,其他字段内容不显示。
VIP会员:登录后只能查看[vip]字段的内容,其他字段内容不显示。
接下来,我们分析您提供的show.php文件中可能存在的问题以及解决方案。
<?php
require("class/connect.php");
include("class/db_sql.php");
include("class/config.php");
include("class/class.php");
$link = db_connect();
$empire = new mysqlquery();
// 获取URL参数
$classid = intval($_GET@['classid']);
$id = intval($_GET@['id']);
// 获取当前用户的会员信息
$muserid = (int) getcvar('mluserid'); // 用户ID
$musername = RepPostVar(getcvar('mlusername')); // 用户名
$mgroupid = (int) getcvar('mlgroupid'); // 会员组ID
// 判断用户身份并加载对应内容
if ($muserid && $mgroupid == 2) { // VIP会员
if ($classid && $id && $class_r[$classid][tbname]) {
$r = $empire->fetch1("SELECT id, vip FROM {$dbtbpre}ecms_" . $class_r[$classid][tbname] . " WHERE id='$id' AND classid='$classid' LIMIT 1");
if ($r[id]) {
echo $r[vip];
}
}
} elseif ($muserid && $mgroupid == 1) { // 普通会员
if ($classid && $id && $class_r[$classid][tbname]) {
$r = $empire->fetch1("SELECT id, member FROM {$dbtbpre}ecms_" . $class_r[$classid][tbname] . " WHERE id='$id' AND classid='$classid' LIMIT 1");
if ($r[id]) {
echo $r[member];
}
}
} else { // 游客
if ($classid && $id && $class_r[$classid][tbname]) {
$r = $empire->fetch1("SELECT id, newstext FROM {$dbtbpre}ecms_" . $class_r[$classid][tbname] . " WHERE id='$id' AND classid='$classid' LIMIT 1");
if ($r[id]) {
echo $r[newstext];
}
}
}
db_close();
$empire = null;
?>
以下是代码的主要改进点:
1. 游客无法查看[newstext]字段内容的问题:
在原始代码中,游客部分的逻辑存在问题。我们通过单独处理游客逻辑,确保当用户未登录时,直接从数据库中读取[newstext]字段的内容并显示。
2. VIP会员同时看到[vip]和[member]字段内容的问题:
原始代码中,VIP会员的部分没有正确判断用户组ID($mgroupid),导致两个字段的内容都被显示。我们通过明确区分VIP会员和普通会员的逻辑,确保只有[vip]字段的内容被显示。
3. 模板中的PHP验证代码:
为了进一步增强系统的灵活性,可以在模板中加入以下PHP代码来验证用户身份:
<!--code.start-->
?
if (!$_COOKIE['ecmsmlgroupid']) {
echo "您不是会员";
} elseif ($_COOKIE['ecmsmlgroupid'] == 1) {
echo "普通会员";
} elseif ($_COOKIE['ecmsmlgroupid'] == 2) {
echo "VIP会员";
}
?<!--code.end-->
请确保将上述代码添加到您的模板文件中,并替换掉默认的登录提示语句。
最后,修改栏目内容页扩展名为.php,以支持动态内容加载。完成以上步骤后,您的系统应该能够正确根据用户身份显示对应的内容。
希望这些调整可以帮助您解决问题!如果有其他疑问,请随时提问。