说起论坛, 自然而然就会想到到用户组. 刚申请账号是新手, 慢慢地发帖回帖多了就升级了, 中级用户, 高级用户等等, 说法不一样而已. 这些不同的用户组有不同的权限. 等级越高一般权限也越高. 划分用户组非常重要, 不仅便于管理, 也能激励用户活跃发帖, 当用户等级很高时, 会有一种荣誉感. 而且还有很多特权.
在介绍权限管理之前, 先看看用户组相关的数据库表结构, 很简单:
-- TableName pw_usergroups 用户组信息
-- Fields gid 用户组id
-- Fields gptype 用户组分类
-- Fields grouptitle 用户组头衔
-- Fields groupimg 等级图片号
-- Fields grouppost 升级点数需求
-- Fields ifdefault 是否为默认组
进入后台, 左侧导航条就能看到用户组权限, 点击就能管理用户组了, 在管理之前, 推荐看下详细帮助.
站点的用户组分为会员组、系统组、特殊组、默认组.
1.
会员组:级别按照会员发的帖子数自动进行级别判断并更新.
每个会员都有等级, 等级会随着会员在论坛活跃发帖不断提升. 进入会员组权限后能看到所有会员组列表, 在会员组编辑这一项下面, 可以看到头衔和升级点数需求(其他类没有这项设置)这两项是输入框, 头衔名称可以随站长的需求修改, 而升级点数就是会员升级的依据, 这个点数是一个综合积分. 站长可以设置综合积分的算法: 在顶部导航点击用户, 左侧导航第二条就是用户组提升, 进去就能设置综合积分的算法了, 根据提示信息设置就行.
phpwind 提供了一套灵活的等级提升方案,可以根据综合积分来划分用户等级,设定一个好的等级提升方案能更好的体现站点等级系统的价值
综合积分:综合积分是按照会员组提升方案中设定的积分比率来计算的
计算方法:各项积分*比率的和为综合积分的值
如等级提升方案设置
发帖数:
1
威 望: 0.5
金 钱: -1
其 他: 0
综合积分计算方法如下:
发帖数*1
+ 威望*0.5 + 金钱*(-1)
2.
系统组:属于站点管理层,系统组成员由站点管理员设定,管理员可以在用户管理内编辑用户组成员.
管理员(manager):由站点创始人在用户管理内进行设置
总版主(superadmin):前台管理员,拥有前台所有管理权限
版主(admin):负责分版块的管理工作
3.
特殊组:可以设置管理权限的组别,区别于系统组,特殊组可以进行出售.
4.
默认组:默认组别不可删除,当其他组别未设置权限时,则使用该默认权限.
default:默认权限设置(没设置过权限的用户组使用,可以节约不必要的资源)
guest:站点游客权限设置
禁言组(banned):此用户组禁止发言
未验证会员(newrg):等待验证的用户组
注:可以在论坛模式-界面设置-首页里选择参与在线显示的用户组
在会员组列表, 还可以进行其他管理操作, 点击等级图片可以修改, 如果需要使用自己的图片, 可以把图片放到images/wind/level/文件夹下, 注意只能使用gif, 命名问数字, 比如”22.gif”.
还可以添加和删除已有的用户组, 不过删除用户组后最后添加相应组ID的用户组, 要不然会员的用户组会错乱, 如果不添加, 那要更新一下用户组缓存. 系统组中有3个是不能删除的, 管理员, 总版主和论坛版主, 这3个用户组是核心的论坛管理层. 默认用户组则既不能删除也不能添加.
上面介绍完了一般的设置, 接下来讲解一下用户组权限设置, 这块是核心内容, 在用户组列表页每个用户组后面都有编辑链接, 点击就能设置各种权限了. 会员组和默认用户组可以看到分成6个大类, 基本权限, 帖子权限, 附件权限, 群组权限, 消息权限和文章权限. 系统组可以看到7个大类, 在前面6个基础上多了1个管理权限. 特殊会员组有8个, 比系统组还多一个用户组购买.
1.
基本权限
这是最主要的设置, 每项设置后面都有说明. 这里不罗列了, 补充说明一些事项:
多账户绑定权限可以是单向的, 比如管理员用户组开启, 而普通会员组(比如新手上路)没开启, 那么管理员可以绑定一个普通用户账号, 绑定好以后就能很方便的切换账号, 相应地用这个被绑定的普通会员登录后也能切换到管理员账号. 但是其他普通会员的账号就不能绑定另外一个账号. 这个权限在测试论坛定制功能(涉及到权限)时非常方便.
最顶部的用户组头衔可以修改, 这里修改和在用户组列表修改效果是一样的.
头像以及签名的设置选项很适合区分等级特权, 这是一种激励用户的好方法.
强制用户组密码变更这项比较适合论坛版主, 防止版主账号被盗对论坛造成损失, 但时间别设置太短, 要不然频繁需要更换会引起会员反感.
2.
帖子权限
和帖子相关的设置都在这里设置:
每日最多发帖数针对低等级的用户组最好设置成合理的值, 在一定程度上能够减少垃圾帖.
连续发帖时间控制是防止水帖的, 跟上面一项设置结合很更有效的防止垃圾帖.
多媒体自动展开这项不推荐设置
帖子评分设置这项要特别注意, 首先这项设置受帖子评分权限的限制, 如果权限没开, 下面设置了也无效. 其次, 评分设置有很多项积分设置, 默认是看到的是第一种积分的界面, 千万别以为是所有积分的设置, 要设置其他积分, 要点击相应的积分然后设置, 如果仅仅是积分前面的复选框勾上了, 而没有设置具体的参数, 会导致评分出问题.
3.
附件权限
这里设置项比较少, 但要注意附件设置尺寸收到系统设置(apache)限制, 即使把这里尺寸设置很大, 但是系统设置里面只有2M, 前台实际能上传最大附件也只有2M.
4.
群组权限
允许创建群组个数需要在群组基础设置中开启允许创建新群组才有效.
5.
消息权限
发送多人消息不要轻易开启, 一般只有管理员有这个权限.
6.
文章权限
7.
管理权限
这里是系统组重要的权限设置点, 主要包括版主管理帖子的权限, 精华, 加亮, 删除, 禁言用户, 查看隐藏帖等等.
强制输入操作原因这项建议对论坛版主开启, 避免纠纷时无据可查.
8.
用户组购买
这里是特殊会员组专属的, 可以作为论坛积分消耗的有效途径. 开启购买后需要同时在计划任务设置中开启头像限期自动回收功能
介绍完各项设置后, 再说明下一项强大的功能: 横向扩展. 这个主要是方便管理员同时设置几个会员组用的. 有时候可能有些权限很多会员组的设置基本是一样的, 如果一个个用户组单独设置既费时有劳神, 这时候就可以使用横向扩展. 不管是点击上面的横向扩展还是下面的横向扩展条, 都可以激活. 你会看到每个权限设置选项后面多了一个复选框, 把你需要同时设置的权限勾上, 然后在选择多个用户组,可使用
‘Ctrl’
键进行多选, 也可使用
‘Shift’
键或拖动鼠标连续选择多个版块. 然后提交就完成了.
另外, 还可以针对某一项设置横向扩展, 每个设置都是链接形式的, 点击就可以看到拥有该项设置的所有用户组列表. 可以很方便的对所有用户组设置.
下面开始讲解代码, 用户组权限的链接是admin.php?adminjob=level, 细心的读者会发现, 后台管理链接大多是类似这样的. 解析起来也很方便, 根据adminjob参数的值就能找到功能代码, 以上链接可以指引到admin/level.php, 这就是用户组权限的核心代码. 下面简单介绍下代码, 注释使用绿色文字标示.
<?php
!function_exists('adminmsg') &&
exit('Forbidden');
S::gp(array('adminitem'));
empty($adminitem) && $adminitem = 'level';//设置默认管理项
$basename = "$admin_file?adminjob=level&adminitem=$adminitem";//设置页面链接基础部分
$levelImg = array();
if ($fp = opendir("$imgdir/$stylepath/level")) {
while (($file = readdir($fp))) {
if (!is_dir($file) && substr($file, -4) == '.gif') {
$imgId = substr($file, 0, -4);
$levelImg[$imgId] = $file;
}
}
closedir($fp);
}
ksort($levelImg); //上面一段代码是检查图片目录并设置用户组图片数组
if ($adminitem == 'level'){ //管理设置主要代码, 根据action不同来划分功能
if (empty($action)) {//默认进入用户组列表
…
} elseif ($_POST['action'] == "menedit") {//用户组列表页修改会员组参数(用户组名, 图片, 升级点数需求)
…
} elseif ($_POST['action'] == "defedit") {//用户组列表页修改默认组参数
…
} elseif ($_POST['action'] == "sysedit") {//用户组列表页修改系统组参数
…
} elseif ($_POST['action'] == "vipedit") {//用户组列表页修改特殊组参数
…
} elseif ($action == 'addgroup') {//增加用户组
…
} elseif ($action == "delgroup") {//删除用户组
…
} elseif ($action == "editgroup") {//核心代码, 编辑用户组
S::gp(array('gid', 'step'), 'GP', 2);
if (empty($step)) {//权限列表页
if ($gid) {
$grouptitle = $db->get_value("SELECT
grouptitle FROM pw_usergroups WHERE gid=" . S::sqlEscape($gid));
}
empty($gid) && $gid = 1;
//读取文件缓存, 拆分参数及整理
if (file_exists(D_P . "data/groupdb/group_$gid.php") && $gid != 1) {
pwCache::getData(S::escapePath(D_P
. "data/groupdb/group_$gid.php"));
$default = 0;
} else {
pwCache::getData(D_P . "data/groupdb/group_1.php");
$default = 1;
}
$rgd = $db->get_one("SELECT
grouptitle,gptype FROM pw_usergroups WHERE gid=" . S::sqlEscape($gid));
$grouptitle = $rgd['grouptitle'];
$gp_gptype = $rgd['gptype'];
@extract($SYSTEM);
@extract($_G);
$groupselect = $credit_type = $special_type = $upload_type = '';
$selected_g = array($gid => 'selected');
foreach ($ltitle as $key => $value) {
$groupselect
.= "<option value=$key $selected_g[$key]>$value</option>";
}
$maxuploadsize = @ini_get('upload_max_filesize');
$uploadtype = unserialize($uploadtype);
foreach ($uploadtype as $key => $value) {
$upload_type
.= "<tr>
<td><input
class=\"input input_wc\" name=\"filetype[]\"
value=\"$key\"></td>
<td><input
class=\"input input_wc\" name=\"maxsize[]\" value=\"$value\"></td><td><a
href=\"javascript:;\" onclick=\"removecols(this);\">[删除]</a></td>
</tr>";
}
require_once (R_P . 'require/credit.php');
$_G['markset'] = unserialize($_G['markset']);
$credit_type = $credit->cType;
$pergroup_sel = $media_sel = /*$allowpcid_sel =*/ array();
foreach (explode(',', $pergroup) as $value) {
$pergroup_sel[$value] = 'checked';
}
foreach (explode(',', $tcanedit) as $value) {
$tcanedit_sel[$value] = 'checked';
}
/*
foreach (explode(',', $allowpcid) as $value) {
$allowpcid_sel[$value] = 'checked';
}
*/
foreach (explode(',', $media) as $value) {
$media_sel[$value] = 'checked';
}
foreach ($credit->cType as $key => $value) {
$special_type
.= "<option value=\"$key\"" . ($selltype == $key ? ' selected' : '') . ">$value</option>";
}
!$banmax && $banmax != 0 && $banmax = 1;
//检查原来参数设置状态, 页面显示
ifcheck($allowpcid, 'allowpcid');
ifcheck($allowread, 'allowread');
//ifcheck($allowpcid_sel['1'],
'allowpcid_sel');
ifcheck($allowmember, 'allowmember');
ifcheck($allowviewonlineread, 'allowviewonlineread');
ifcheck($allowprofile, 'allowprofile');
ifcheck($allowreport, 'allowreport');
ifcheck($allowmessege, 'allowmessege');
ifcheck($allowsort, 'allowsort');
ifcheck($alloworder, 'alloworder');
ifcheck($allowpost, 'allowpost');
ifcheck($allowrp, 'allowrp');
ifcheck($allownewvote, 'allownewvote');
ifcheck($allowvote, 'allowvote');
ifcheck($allowactive, 'allowactive');
ifcheck($allowgoods, 'allowgoods');
ifcheck($allowdebate, 'allowdebate');
ifcheck($allowmodelid, 'allowmodelid');
ifcheck($allowactivity, 'allowactivity');
ifcheck($htmlcode, 'htmlcode');
//抢楼贴
ifcheck($robbuild, 'robbuild');
//ifcheck($wysiwyg,'wysiwyg');
ifcheck($allowvisit, 'allowvisit');
ifcheck($allowhidden, 'allowhidden');
ifcheck($allowsell, 'allowsell');
ifcheck($allowloadrvrc, 'allowloadrvrc');
ifcheck($allowhide, 'allowhide');
ifcheck($userbinding, 'userbinding');
ifcheck($upload, 'upload');
ifcheck($allowportait, 'allowportait');
ifcheck($allowhonor, 'allowhonor');
ifcheck($allowdelatc, 'allowdelatc');
ifcheck($allowat, 'allowat');
ifcheck($allowbuykmd, 'allowbuykmd');
${'allowsearch_' . (int) $allowsearch} = 'checked';
${'allowupload_' . (int) $allowupload} = 'checked';
${'allowdownload_' . (int) $allowdownload} = 'checked';
ifcheck($msggroup, 'msggroup');
ifcheck($ifmemo, 'ifmemo');
ifcheck($previewvote, 'previewvote');
ifcheck($allowreward, 'allowreward');
ifcheck($viewvote, 'viewvote');
ifcheck($pmodifyvote, 'pmodifyvote');
${'modifyvote_' . ($modifyvote ? 'Y' : 'N')} = 'selected';
ifcheck($viewipfrom, 'viewipfrom');
ifcheck($atclog, 'atclog');
//去掉展区功能@modify panjl@2010-11-2
//ifcheck($show, 'show');
ifcheck($atccheck, 'atccheck');
ifcheck($allowreplyreward, 'allowreplyreward');
ifcheck($allowremotepic, 'allowremotepic');
ifcheck($dig, 'dig');
ifcheck($leaveword, 'leaveword');
ifcheck($allowencode, 'allowencode');
//消息中心管理权限
$maxmsg = (int) $maxmsg;
$maxsendmsg = (int) $maxsendmsg;
$messagecontentsize = (int) $messagecontentsize;
ifcheck($multiopen, 'multiopen');
ifcheck($diaryallow, 'diaryallow');
/*
* 管理权限
*/
ifcheck($allowbuy, 'allowbuy');
ifcheck($visithide, 'visithide');
ifcheck($rzforum, 'rzforum');
ifcheck($tpctype, 'tpctype');
ifcheck($tpccheck, 'tpccheck');
ifcheck($delatc, 'delatc');
ifcheck($moveatc, 'moveatc');
ifcheck($copyatc, 'copyatc');
ifcheck($digestadmin, 'digestadmin');
ifcheck($lockadmin, 'lockadmin');
ifcheck($pushadmin, 'pushadmin');
ifcheck($coloradmin, 'coloradmin');
ifcheck($downadmin, 'downadmin');
ifcheck($viewcheck, 'viewcheck');
ifcheck($viewclose, 'viewclose');
ifcheck($attachper, 'attachper');
ifcheck($delattach, 'delattach');
ifcheck($shield, 'shield');
ifcheck($unite, 'unite');
ifcheck($split, 'split'); //拆分帖子
ifcheck($remind, 'remind');
ifcheck($pingcp, 'pingcp');
ifcheck($inspect, 'inspect');
ifcheck($superright, 'superright');
ifcheck($enterreason, 'enterreason');
ifcheck($colonyright, 'colonyright');
ifcheck($forumcolonyright, 'forumcolonyright');
ifcheck($viewip, 'viewip');
${'topped_' . (int) $topped} = 'checked';
${'markable_' . (int) $markable} = 'checked';
${'banuser_' . (int) $banuser} = 'checked';
ifcheck($bantype, 'bantype');
ifcheck($banadmin, 'banadmin');
ifcheck($banuserip, 'banuserip');
ifcheck($bansignature, 'bansignature');
ifcheck($posthide, 'posthide');
ifcheck($sellhide, 'sellhide');
ifcheck($encodehide, 'encodehide');
ifcheck($anonyhide, 'anonyhide');
ifcheck($activitylist, 'activitylist'); //管理活动报名列表
ifcheck($postpers, 'postpers');
ifcheck($anonymous, 'anonymous');
ifcheck($replylock, 'replylock');
ifcheck($modother, 'modother');
ifcheck($deltpcs, 'deltpcs');
ifcheck($allowtime, 'allowtime');
ifcheck($areapush, 'areapush');
ifcheck($overprint, 'overprint');
//ifcheck($tcanedit,
'tcanedit');
ifcheck($replaytopped, 'replaytopped');
ifcheck($replayorder, 'replayorder');
ifcheck($deldiary, 'deldiary');
ifcheck($delalbum, 'delalbum');
ifcheck($delweibo, 'delweibo');
ifcheck($delactive, 'delactive');
ifcheck($recommendactive, 'recommendactive');
ifcheck($posturlnum, 'posturlnum');
$schtime != 'all' && !is_numeric($schtime) && $schtime = 7776000;
${'schtime_' . $schtime} = 'selected';
$sellinfo && $sellinfo = str_replace('<br />', "\n", $sellinfo);
//获取各项权限代码, 文件是template/wind/lang_right.htm
require GetLang('right');
$lang['right']['system'] = array_merge($lang['right']['system'], $lang['right']['systemforum']);
unset($lang['right']['systemforum']);
$levelHook = L::loadClass('levelhook');
$levelHook->init($db_modes, $_G,$SYSTEM);
$extentSystem = $levelHook->getSystemLevels();
//包含模板文件, 位于template/admin/level.htm
include PrintEot('level');
exit();
} elseif ($_POST['step'] == 2) {//编辑后提交后处理代码
//获取各参数数组, 几乎页面上所有的参数变量都在group里面, othergroup是横向扩展的参数, othergid是横向扩展所选用户组的参数
S::gp(array('othergroup', 'group', 'othergid', 'filetype', 'grouptitle'), 'P');
S::gp(array('maxsize'), 'P', 2);
//下面代码省略, 一般不需要修改, 如果有兴趣可以自己研究
…
} elseif ($step == 3) {
$db->update("UPDATE
pw_usergroups SET ifdefault='1' WHERE gid=" . S::sqlEscape($gid));
//* P_unlink(D_P .
"data/groupdb/group_$gid.php");
pwCache::deleteData(D_P . "data/groupdb/group_$gid.php");
adminmsg('operate_success');
}
} elseif ($action == 'setright') {//针对单个选项的横向设置代码, 能够列出该选项所有用户组的设置
…
}elseif ($adminitem =='batch'){ //导入导出功能
…
}elseif ($adminitem =='help'){ //详细帮助功能
include PrintEot('level');
exit();
}
?>
下面示范一下个人定制添加一项权限修改代码的方法, 假如现在我们设置某些用户组能查看到版块管理操作日志的代码.
1.
首先要增加相应的模板代码.
截取template/admin/level.htm里面部分代码
foreach ($lang['right'] as $key => $value) {
…//里面代码省略
}
重点我们要看$lang['right'], 这个变量是另外一个模板文件里面的, 在admin/level.php里面有包含这个模板文件的代码, 上面代码黄底的部分就是, 这个模板文件在template/wind/lang_right.htm,
它里面集合了所有权限设置项的html代码, 我们要添加的模板也需要在这个里面.
下面截取template/wind/lang_right.htm里面的部分代码
<?php
!function_exists('readover') &&
exit('Forbidden');
$lang['right_title'] = array(//这个数组说明下面$lang['right']各主键对应的大类
'basic' =>
'基本权限',
'read' =>
'帖子权限',
'att' =>
'附件权限',
'group' =>
'群组权限',
'message' => '消息权限',
'special' => '用户组购买',
'system' => '管理权限'
);
$lang['right'] = array (
…//前面省略
'basic' => array(
'allowvisit' => array(
'title' => '站点访问',
'desc' => '关闭后,用户将不能访问站点的任何页面',
'html' => '<ul class="list_A list_80 cc"><li><input
type="radio" value="1" name="group[allowvisit]"
$allowvisit_Y />开启</li><li><input type="radio"
value="0" name="group[allowvisit]" $allowvisit_N />关闭</li></ul>'
),
'allowhide' => array(
'title' => '隐身登录',
'desc' => '开启后,用户可以隐身登录站点',
'html' => '<ul class="list_A list_80 cc"><li><input
type="radio" value="1" name="group[allowhide]"
$allowhide_Y />开启</li><li><input type="radio"
value="0" name="group[allowhide]" $allowhide_N />关闭</li></ul>'
),
'userbinding' => array(
'title' => '多账号绑定',
'desc' => '俗称马甲绑定',
'desc' => '开启后,用户可以进行多账号绑定',
'html' => '<ul class="list_A list_80 cc"><li><input
type="radio" value="1" name="group[userbinding]"
$userbinding_Y />开启</li><li><input type="radio"
value="0" name="group[userbinding]" $userbinding_N />关闭</li></ul>'
),
'allowread' => array(
'title' => '浏览帖子',
'desc' => '开启后,用户可以浏览帖子',
'html' => '<ul class="list_A list_80 cc"><li><input
type="radio" value="1" name="group[allowread]"
$allowread_Y />开启</li><li><input type="radio"
value="0" name="group[allowread]" $allowread_N />关闭</li></ul>'
),
'allowsearch' => array(
'title' => '搜索控制',
'desc' => '修改用户的搜索权限',
'html' => '<ul class="list_A"><li><input
type="radio" value="0" name="group[allowsearch]"
$allowsearch_0 />不允许</li>
<li><input
type="radio" value="1" name="group[allowsearch]"
$allowsearch_1 />允许搜索主题标题</li>
<li><input
type="radio" value="2" name="group[allowsearch]"
$allowsearch_2 />允许搜索主题标题、内容</li>
<li><input
type="radio" value="3" name="group[allowsearch]"
$allowsearch_3 />允许搜索全部内容(包含回复内容)</li></ul>'
),
'allowmember' => array(
'title' => '查看会员列表',
'desc' => '开启后,用户可以查看会员列表',
'html' => '<ul class="list_A list_80 cc"><li><input
type="radio" value="1" name="group[allowmember]"
$allowmember_Y />开启</li><li><input type="radio"
value="0" name="group[allowmember]" $allowmember_N />关闭</li></ul>'
),
'allowadminlog' =>
array(
'title' => '可查看管制日志中的操作人',
'html' => '<input
type="radio" value="1" name="group[allowadminlog]" $allowadminlog_Y />是
<input
type="radio" value="0" name="group[allowadminlog]" $allowadminlog_N />否'
),
'allowviewonlineread' => array(
'title' => '查看在线会员所在页面',
'desc' => '允许此用户组用户查看在线会员当前所在的页面',
'html' => '<ul class="list_A list_80 cc"><li><input type="radio"
value="1" name="group[allowviewonlineread]"
$allowviewonlineread_Y />开启</li><li><input type="radio"
value="0" name="group[allowviewonlineread]"
$allowviewonlineread_N />关闭</li></ul>'
),
),
…//后面代码省略
);
?>
我们把添加的权限放在合适的位置, 上面黄色底的代码就是添加的部分.
按照类似的格式写好代码, 更简便的方式是copy一份格式相同的选项, 修改掉中间的title, 变量名称(红色部分, allowadminlog是我们增加的, 4个地方要保持一致), 主键名称就好.添加好以后, 去后台管理里面的基本设置里面就能看到该权限的选项了.
2.
然后修改admin/level.php代码
这部分修改相当简单, 因为添加的权限也是在group参数数组里面, 所以上一步改好的代码直接就能使用, 你设置好以后提交, 数据库和文件缓存里面都会有新增权限的存在了. 唯一需要改的权限列表展示的部分(如果不改, 你将无法知道该新增选项目前是否开启的状态), 所以只要在step为空(看前面的代码解释, 为空展示权限列表)的代码里面加上一句.
ifcheck($allowpcid, 'allowpcid');
ifcheck($allowread, 'allowread');
//ifcheck($allowpcid_sel['1'],
'allowpcid_sel');
ifcheck($allowmember, 'allowmember');
ifcheck($allowadminlog,'allowadminlog'); ifcheck($allowviewonlineread, 'allowviewonlineread');
ifcheck($allowprofile, 'allowprofile');
ifcheck($allowreport, 'allowreport');
黄色部分就是新增的代码, 加好以后再看权限列表的时候就能看到目前开启状态.
3.
接下来在前台的代码里面就能用到了
如前面所说, 新增的权限设置好提交后, 数据库和文件缓存里面都存在, 而前台使用的就是文件缓存. 请看global.php里面的代码
if ($groupid == 'guest') {
pwCache::getData(D_P.'data/groupdb/group_2.php');
} elseif (file_exists(D_P."data/groupdb/group_$groupid.php")) {
pwCache::getData(S::escapePath(D_P."data/groupdb/group_$groupid.php"));
} else {
pwCache::getData(D_P.'data/groupdb/group_1.php');
}
其中红色的$groupid就是当前用户的用户组id, global.php文件里面就包含了该用户组所有权限的缓存文件, 因此, 只要代码里面包含了global.php文件, 就能很方便的查询当前用户的所有权限. 下面看下data/groupdb/group_3.php文件
<?php
$gp_gid='3';
$gp_gptype='system';
$gp_grouptitle='管理员';
$gp_groupimg='21';
$gp_grouppost='0';
$_G=array(
'allowactive' =>
'1',
'allowat' => '1',
'allowdebate' =>
'1',
'allowdelatc' =>
'1',
'allowdownload' =>
'1',
'allowencode' =>
'1',
'allowgoods' =>
'1',
'allowhidden' =>
'1',
'allowhide' => '0',
'allowhonor' =>
'1',
'allowmember' =>
'1',
'allowadminlog' => '1',
'allowmessege' => '1',
'allowmodelid' =>
'1',
'allownewvote' =>
'1',
'allownum' =>
'200',
'alloworder' =>
'1',
'allowpcid' =>
'1,2',
'allowportait' =>
'1',
'allowpost' => '1',
'allowprofile' =>
'1',
'allowread' => '1',
'allowremotepic' =>
'1',
'allowreplyreward'
=> '1',
'allowreport' =>
'1',
'allowreward' =>
'1',
'allowrp' => '1',
'allowsearch' =>
'2',
'allowsell' => '1',
'allowsort' => '1',
'allowupload' =>
'1',
'allowvisit' => '1',
'allowvote' => '1',
'anonymous' => '0',
'atccheck' => '1',
'atclog' => '1',
'atnum' => '10',
'dig' => '1',
'edittime' => '0',
'fontsize' => '',
'htmlcode' => '1',
'ifmemo' => '1',
'imgheight' => '',
'imgwidth' => '',
'leaveword' => '1',
'markable' => '2',
'markdt' => '',
'markset' =>
'a:5:{s:5:"money";a:4:{s:9:"markctype";s:5:"money";s:9:"maxcredit";s:3:"100";s:9:"marklimit";a:2:{i:0;s:2:"-2";i:1;s:1:"5";}s:6:"markdt";s:1:"0";}s:4:"rvrc";a:3:{s:9:"maxcredit";s:0:"";s:9:"marklimit";a:2:{i:0;s:0:"";i:1;s:0:"";}s:6:"markdt";s:1:"0";}s:6:"credit";a:3:{s:9:"maxcredit";s:0:"";s:9:"marklimit";a:2:{i:0;s:0:"";i:1;s:0:"";}s:6:"markdt";s:1:"0";}s:8:"currency";a:3:{s:9:"maxcredit";s:0:"";s:9:"marklimit";a:2:{i:0;s:0:"";i:1;s:0:"";}s:6:"markdt";s:1:"0";}i:1;a:3:{s:9:"maxcredit";s:0:"";s:9:"marklimit";a:2:{i:0;s:0:"";i:1;s:0:"";}s:6:"markdt";s:1:"0";}}',
'maxcstyles' => '',
'maxfavor' =>
'100',
'maxgraft' => '10',
'maxmsg' => '50',
'maxsendmsg' => '',
'media' => '',
'modifyvote' =>
'1',
'msggroup' => '1',
'multiopen' => '1',
'pergroup' =>
'member,system,special',
'postlimit' => '',
'postpertime' =>
'3',
'pwdlimitime' =>
'',
'robbuild' => '1',
'schtime' =>
'7776000',
'searchtime' =>
'10',
'show' => '1',
'signnum' => '200',
'systemforum' =>
'1',
'upload' => '1',
'uploadtype' => '',
'userbinding' =>
'1',
'viewipfrom' =>
'1',
'viewvote' => '1',
);
$SYSTEM=array(
'allowadmincp' =>
'1',
'allowtime' => '1',
'anonyhide' => '1',
'areapush' => '1',
'banmax' => '30',
'bantype' => '1',
'banuser' => '2',
'coloradmin' =>
'1',
'copyatc' => '1',
'delatc' => '1',
'delattach' => '1',
'deltpcs' => '1',
'digestadmin' =>
'1',
'downadmin' => '1',
'encodehide' =>
'1',
'inspect' => '1',
'lockadmin' => '1',
'modother' => '1',
'moveatc' => '1',
'overprint' => '1',
'pingcp' => '1',
'posthide' => '1',
'postpers' => '1',
'pushadmin' => '1',
'remind' => '1',
'replayorder' =>
'1',
'replaytopped' =>
'1',
'replylock' => '1',
'sellhide' => '1',
'shield' => '1',
'superright' =>
'1',
'tcanedit' =>
'3,4,5',
'topped' => '4',
'tpccheck' => '1',
'tpctype' => '1',
'unite' => '1',
'viewcheck' => '1',
'viewclose' => '1',
'viewip' => '1',
);
?>
使用$_G['allowadminlog']就能使用这项权限, 接下来根据这项权限编写相应的代码就可以了.