首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHPCMS 2008 實現欄目權限繼承:子欄目自動獲取父欄目權限的解決方案

     編輯:PHP 相關知識

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

關鍵點說明

  • get_parent_catid():需自行實現,用於遞歸獲取頂級父欄目 ID 或逐級向上查找。
  • 權限判斷順序:先判斷管理權限,若有則自動擁有增、改、查權限;否則分別檢查各項權限。
  • 性能考量:遞歸深度通常較淺,對性能影響可忽略;若欄目層級極深,建議快取父級鏈路。

此修改讓子欄目自動繼承父欄目權限,大幅減輕大型站點的權限維護負担,提升系統靈活性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved