在 PHPCMS 2008 中,權限分配是以「欄目」為核心進行配置,而非以「角色」為出發點。這導致系統缺乏原生的欄目權限繼承機制。當網站欄目數量龐大時,管理員需逐一為每個子欄目配置權限,工作量極大且極易出錯。
解決思路是在判斷當前欄目權限時,若該欄目未顯式分配權限,則自動向上遞歸檢查所有父級欄目。只要任一父級擁有對應權限,子欄目即視為擁有該權限;若所有父級均無權限,則最終判定為無權限。
修改 admin/content.inc.php 文件(約第 31 行),找到原始權限判斷代碼:
$allow_manage = $priv_role->check('catid', $catid, 'manage');
$allow_add = $allow_manage ? true : $priv_role->check('catid', $catid, 'add');
$allow_check = $allow_manage ? true : $priv_role->check('catid', $catid, 'check');
$allow_view = $allow_manage ? true : $priv_role->check('catid', $catid, 'view');
在其後插入繼承邏輯:
if (!$allow_manage) {
$pcatid = get_parent_catid($catid); // 獲取父級 ID 的自定義函數,建議採用遞歸實現
$pcatid = $CATEGORY[$pcatid]['parentid'];
$allow_manage = $priv_role->check('catid', $pcatid, 'manage');
$allow_add = $allow_manage ? true : $priv_role->check('catid', $pcatid, 'add');
$allow_check = $allow_manage ? true : $priv_role->check('catid', $pcatid, 'check');
$allow_view = $allow_manage ? true : $priv_role->check('catid', $pcatid, 'view');
}
此修改讓子欄目自動繼承父欄目權限,大幅減輕大型站點的權限維護負担,提升系統靈活性。