DEDECMS後臺頻道管理員許可權三級子欄目許可權新增分配問題解決
阿新 • • 發佈:2019-02-16
昨天在增加了一個“頻道管理員”,並賦予許可權欄目之後,登陸後臺卻只能看到一級和二級目錄,無法看到三級目錄。查詢原因後發現確實是dede的一個小缺陷。
導致產生這個缺陷的原因是dede的後臺設定賦予“頻道管理員”欄目時,dede並沒有將子欄目的管理許可權順延給父欄目。就像是你找了一個帶孩子的老婆, 而新老婆的孩子和你並沒有血緣關係一樣,要解決這個問題其實很簡單:就是在原有的二級迴圈上面加個三級迴圈或者更多估計三級多數也就到頭了~~
首先,你找到dede/目錄下的sys_admin_user_edit.php檔案,然後查詢
//顯示使用者資訊
$randcode = mt_rand(10000,99999);
$safecode = substr(md5($cfg_cookie_encode.$randcode),0,24);
$typeOpti***** = '';
。。。。。。
直到:include DedeInclude('templets/sys_admin_user_edit.htm');
等程式碼,然後用以下程式碼來替換即可;
//顯示使用者資訊
$randcode = mt_rand(10000,99999);
$safecode = substr(md5($cfg_cookie_encode.$randcode),0,24);
$typeOpti***** = '';
$row = $dsql->GetOne("Select * From `#@__admin` where id='$id'");
$typeids = explode(',', $row['typeid']);
$dsql->SetQuery("Select id,typename From `#@__arctype` where reid=0 And (ispart=0 Or ispart=1)");
$dsql->Execute('op');
while($nrow = $dsql->GetObject('op'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='btype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('s');
while($nrow = $dsql->GetObject('s'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">—{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('t');
while($nrow = $dsql->GetObject('t'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">─{$nrow->typename}</option>\r\n";
}
}
}
include DedeInclude('templets/sys_admin_user_edit.htm');
導致產生這個缺陷的原因是dede的後臺設定賦予“頻道管理員”欄目時,dede並沒有將子欄目的管理許可權順延給父欄目。就像是你找了一個帶孩子的老婆, 而新老婆的孩子和你並沒有血緣關係一樣,要解決這個問題其實很簡單:就是在原有的二級迴圈上面加個三級迴圈或者更多估計三級多數也就到頭了~~
首先,你找到dede/目錄下的sys_admin_user_edit.php檔案,然後查詢
//顯示使用者資訊
$randcode = mt_rand(10000,99999);
$safecode = substr(md5($cfg_cookie_encode.$randcode),0,24);
$typeOpti***** = '';
。。。。。。
直到:include DedeInclude('templets/sys_admin_user_edit.htm');
等程式碼,然後用以下程式碼來替換即可;
//顯示使用者資訊
$randcode = mt_rand(10000,99999);
$safecode = substr(md5($cfg_cookie_encode.$randcode),0,24);
$typeOpti***** = '';
$row = $dsql->GetOne("Select * From `#@__admin` where id='$id'");
$typeids = explode(',', $row['typeid']);
$dsql->SetQuery("Select id,typename From `#@__arctype` where reid=0 And (ispart=0 Or ispart=1)");
$dsql->Execute('op');
while($nrow = $dsql->GetObject('op'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='btype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('s');
while($nrow = $dsql->GetObject('s'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">—{$nrow->typename}</option>\r\n";
$dsql->SetQuery("Select id,typename From #@__arctype where reid={$nrow->id} And (ispart=0 Or ispart=1)");
$dsql->Execute('t');
while($nrow = $dsql->GetObject('t'))
{
$typeOpti***** .= "<option value='{$nrow->id}' class='stype'".(in_array($nrow->id, $typeids) ? ' selected' : '').">─{$nrow->typename}</option>\r\n";
}
}
}
include DedeInclude('templets/sys_admin_user_edit.htm');