程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHPCMS發布頁面的欄目選擇問題

PHPCMS發布頁面的欄目選擇問題

編輯:關於PHP編程

在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']);

投機成分很高,僅作參考。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved