PHPCMS发布页面的栏目选择问题

PHPCMS的发布页面中有个BUG,即使编辑无权限访问某个栏目,但是也还都可以在发布页面的栏目下拉菜单中选择该栏目,并可以将文章发布到该栏目下。这个BUG如何修复呢?我们先来看看发布页面的下拉菜单是如何生成的。云鼎娱乐城

发布页面的模板文件是在 /admin/templates/content_add.tpl.php,其表单是通过下面语句输出的:

if(is_array($forminfos[‘base‘]))
{
	foreach($forminfos[‘base‘] as $field=>$info)
	{
	}
}

线索找到了,就是 $forminfos 这个数组。这个数组实在 /admin/content.inc.php 这个文件中生成的,我们看看生成代码:

$data[‘catid‘] = $catid;
$data[‘template‘] = isset($template_show) ? $template_show :$MODEL[$modelid][‘template_show‘];

require CACHE_MODEL_PATH.‘content_form.class.php‘;
$content_form = new content_form($modelid);
$forminfos = $content_form->get($data);

把数组 $forminfos 打印出来可以发现,下拉菜单的代码保存在 $forminfos[‘base‘][‘catid‘][‘form‘] 中:

<select name="info[catid]" id="catid"><option value="96" >扶贫动态</option><option value="95" >通知公告</option><option value="35" >最新动态</option><option value="36" selected>新闻</option><option value="37" >爱心捐助</option><option value="83" >捐助纪实</option><option value="38" >爱心回馈</option><option value="40" >捐款名单</option><option value="41" >紧急求助</option><option value="73" >帮助中心</option><option value="74" >友情连接</option><option value="43" >对口地区</option><option value="44" >新闻动态</option><option value="45" >援建项目</option><option value="47" >爱心捐助</option><option value="48" >情系三峡</option><option value="50" >新闻专区</option><option value="51" >爱心捐助</option><option value="52" >政策动态</option><option value="53" >结对帮扶</option><option value="54" >援建项目</option><option value="56" >扶贫现状</option><option value="57" >扶助对象</option><option value="58" >新闻动态</option><option value="59" >爱心捐助</option><option value="60" >扶贫项目</option><option value="62" >基金简介</option><option value="64" >募捐情况</option><option value="65" >基金用途</option><option value="66" >账户情况</option><option value="67" >新闻动态</option><option value="68" >义工</option><option value="69" >政策法规</option><option value="87" >顶新闻栏</option><option value="88" >顶新闻栏</option><option value="89" >顶新闻栏</option><option value="98" >顶新闻栏</option><option value="99" >顶新闻栏</option></select><input type="hidden" name="old_catid" value="36"> <a href=\‘\‘ class="jqModal" onclick="$(\‘.jqmWindow\‘).show();"/> [同时发布到其他栏目]</a>

还是投机了一把,只要把里面的数字正则抽取出来,进行权限验证,没权限的unset掉,余下的再组合到一起,重新生成 $forminfos[‘base‘][‘catid‘][‘form‘] 即可:

$data[‘catid‘] = $catid;
$data[‘template‘] = isset($template_show) ? $template_show :$MODEL[$modelid][‘template_show‘];

require CACHE_MODEL_PATH.‘content_form.class.php‘;
$content_form = new content_form($modelid);
$forminfos = $content_form->get($data);
// 判断权限
preg_match_all("/<option.*?<\/option>/", $forminfos[‘base‘][‘catid‘][‘form‘], $matches[‘str‘]);
preg_match_all("/[1-9]\d/", $forminfos[‘base‘][‘catid‘][‘form‘], $matches[‘num‘]);
foreach($matches[‘num‘][0] as $key=>$value)
{
	$allow_manage = $priv_role->check(‘catid‘, $matches[‘num‘][0][$key], ‘manage‘);
	if(!$allow_manage)
	{
		unset($matches[‘num‘][0][$key]);
		unset($matches[‘str‘][0][$key]);
	}
}
foreach($matches[‘str‘][0] as $key=>$value)
{
	$opstr .= $matches[‘str‘][0][$key];
}

$forminfos[‘base‘][‘catid‘][‘form‘] = preg_replace(‘/<option.*option>/‘, $opstr, $forminfos[‘base‘][‘catid‘][‘form‘]);

投机成分很高,仅作参考。

时间: 2024-10-22 11:58:17

PHPCMS发布页面的栏目选择问题的相关文章

phpcms发布与生成内容页面空白的解决办法

phpcms发布与生成内容页面空白的解决办法 2014/10/14 技术文章评论:暂无评论浏览: 想换个CMS来用,所以新装了几个CMS系统,最后选定了PHPCMS.倒不是因为它非常优秀,而是因帝国的那种标签不太喜欢.顺便提一下,帝国CMS的栏目自定义字段,我觉得很好,如果用来做一个分类性的栏目,分类自身的属性可以自定义字段来实现,像一些游戏网站分区就很方便了.还是转回正题,使用PHPCMS创建好栏目,正要添加内容的时候,这时问题来了,弹出的添加内容页一片空白什么也没有.网上查了一下资料,有说是

如何修改magento产品详细页面的栏目

magento默认模板里面的产品信息页面的布局是以两栏带右侧栏显示的,那么如何修改为两栏带左侧栏或者三栏.一栏的方式显示呢?下面教大家一种很简单的方法就可以实现.下面是默认的布局预览:修改成两栏带左侧栏后的效果:修改成三栏后的效果:修改成一栏效果: 这样的效果很容易实现的,首先你需打开catalog.xml文件1.3版本app > design > frontend > default > deault > layout > catalog.xml1.4版本app &g

Android较低版本(&lt;5.2) 页面默认Select选择框效果的BUG解决

Bug描述: 使用低版本安卓(<5.2),在微信上打开网页,点击下拉框,会出现如下图所示的用来展示select选项的弹出框: 在选项较少的时候,可以向下滑动,将选项滑到底部 滑动前: 滑动后: 期望达到的效果: 解决方案: 判断是否是微信环境: function isWeixinBrowser(){ return /micromessenger/.test(navigator.userAgent.toLowerCase()); } 判断安卓版号: var userAgent = navigato

apache设置多个默认发布页面

最近学到apache,知道了怎样搭建服务器怎样设置一些参数从而达到不同效果,在生活中,我们会发现,比如腾讯,你进入www.qq.com 会发现里面还有音乐邮箱等,这些发布页面如果再新搭建一个服务器,将会特别费事.所以我们开始思考怎样设置多个默认发布页面 一:环境 服务器: [[email protected] ~]# hostnamectl   Static hostname: n/aTransient hostname: localhost.localdomain         Icon n

CentOS6.9-zabbix3.2启动失败原因及页面没有mysql选择项

环境内核信息: [[email protected]01 ~]# uname -a Linux lodboyedu-01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux zabbix启动失败的原因 启动时出这 个错误: [[email protected] zabbix-3.2.7]# /etc/init.d/zabbix_server start /usr/loca

phpcms调用全部频道栏目及子栏目代码详解

经常有朋友在做模板的时候,需要用到调用栏目及其子栏目,增强网站的用户体验! 以下提供的调用全部频道栏目及子栏目的代码加入到模板中的对应位置即可! {loop $CATEGORY $catid $cat} {if !$cat[parentid] && $cat[module]=='phpcms' && $cat[catname]!='网站介绍'} <a href="{$cat[url]}">{$cat[catname]}</a> &

高仿SinaWeibo新浪微博发布页面话题效果

最近做了一个仿新浪微博话题效果的功能,网上搜索了几个效果,都存在一定问题,最终借鉴别人的思路,完成这一套效果. 首先,我们拆分逻辑以及开发顺序. 1,实现话题变色效果 2,实现插入话题效果 3,实现话题选中删除效果 4,实现点击话题,光标在话题之后 下面我们就一步一步实现效果. 一,实现话题变色 实现逻辑主要是通过EditText的addTextChangedListener()来进行监听文本变动,通过正则表达式来匹配出文本中的话题. 利用正则表达式获取全部话题: //正则表达式,一定要和服务器

phpcms前端页面上传文件

PHPCMS其实有一个叫做附件的模块,上传用的就是这个东西,现在我们来看一下对应的文件:phpcms\modules\attachment \attachments.php就是这个文件,大概在29行上(我用的PHPCMS版本号是Phpcms V9.5.8 Release 20140929)有下面一个方法: public function upload() { $grouplist = getcache('grouplist','member'); //获取缓存中身份分组的列表 if($this-

PhpCms V9调用指定栏目子栏目文章的两种方法

第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status=99 and catid in(21,22,23,24,25) order by id DESC" num="7" return="data"} {loop $data $r} <li><a href="{$r[url]}" title="{$r[title]}