PHPCMS可以給某些角色設定權限,比如某些欄目對於某些角色是無法訪問的。但是左側菜單還是會顯示該欄目名稱,這對編輯來說是不需要的。都訪問不了,還顯示欄目名稱干啥呢。看了一下PHPCMS的代碼,簡單地實現了隱藏菜單的小功能。
從後台頁面可以很簡單地分析出,左側菜單的生成是用Ajax:
$.ajax(
{
type:'get',
url:'?mod=phpcms&file=menu&action=get_menu_list&menuid='+id,
cache:cache_refresh,
dataType:'json',
success:function(json)
{
……
}
}
請求的地址是 http://www.bkjia.com/admin.php?mod=phpcms&file=menu&action=get_menu_list&menuid=4
在URL參數中,file是指請求的控制器文件,這裡menu就是指 admin/menu.inc.php這個文件,action 則是方法。我們找到 menu.inc.php 下的 get_menu_list 方法:
case 'get_menu_list':
$data = $m->get_child($menuid);
$data = str_charset(CHARSET, 'utf-8', $data);
$max = array_slice($data, -1);
$data['max'] = $max[0]['menuid'];
$data = json_encode($data);
if(PHP_OS < 5.0) header('Content-type: text/html; charset=utf-8');
echo $data;
break;
將其改為:
case 'get_menu_list':
$data = $m->get_child($menuid);
foreach($data as $k=>$val)
{
if( !empty($data[$k]['keyid']) && substr( $data[$k]['keyid'], 0, 5 ) == 'catid' )
{
if( $data[$k]['keyid'] == 'catid_0' )
{
continue;
}
$catid = str_replace("catid_", "", $data[$k]['keyid']);
// 管理權限
$allow_manage = $priv_role->check('catid', $catid, 'manage');
if(!$allow_manage)
{
unset($data[$k]);
}
}
}
$data = str_charset(CHARSET, 'utf-8', $data);
$max = array_slice($data, -1);
$data['max'] = $max[0]['menuid'];
$data = json_encode($data);
if(PHP_OS < 5.0) header('Content-type: text/html; charset=utf-8');
echo $data;
break;
代碼存在投機性,但大概思路就是這樣。