DEDECMS 后台系统用户授权目录更改为无限级(默认为二级授权)

在做一个学校的项目,分类有四级分类,总共一百多个分类,因为每个分类对应不同的老师,用于上传资料作为考核,但是添加系统用户的时候发现DEDECMS只有两级分类,所以修改啦一些代码,目前不知道是否修改完全,暂时来看,四级目录授权功能是可以授权的,下面是修改的代码。

1.添加/修改系统用户-展示全部分类

打开dede/sys_admin_user_add.php 和dede/sys_admin_user_edit.php

在顶部下引入文件,具体啥用不清楚,因为之前也是参考别人的文章,我估计不引用也没关系,但是我没时间测试,先这样吧

require_once(dirname(__FILE__)."/config.php");
require_once(DEDEADMIN."/inc/inc_catalog_options.php");  // 引入这行代码

修改底部

$dsql->Execute('op');
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
include DedeInclude('templets/sys_admin_user_add.htm');

替换中间的代码为

$typeOptions .= GetOptionList(0,$cuserLogin->getUserChannel(),0);

  

2.修改include/typeunit.class.admin.php文件

找到

 while($row = $this->dsql->GetObject())
            {
                if($row->reid==0) continue;
                $topidstr .= ($topidstr=='' ? $row->reid : ','.$row->reid);
            }

在它下面添加以下代码

/*****************************修改代码,后台管理三级栏目授权开始*******************************/
          // 获取所有顶级栏目id
          $current_id = (string)$admin_catalogs[0];
          $category_arr = [];
          $categorys = explode(',',$admin_catalog);
          foreach ($categorys as $key=>$value) {
            array_push($category_arr,$categorys[$key]);
            $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($categorys[$key]) group by reid ");
            $this->dsql->Execute();
            if(($reid = $this->dsql->GetObject()->reid) != 0) {
              // 不是二级分类
              array_push($category_arr,$reid);
              // 继续判断是否为二级分类
              $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
              $this->dsql->Execute();
              if(($reid = $this->dsql->GetObject()->reid) != 0) {
                array_push($category_arr,$reid);
                // 继续判断是否为二级分类
                $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
                $this->dsql->Execute();
                if(($reid = $this->dsql->GetObject()->reid) != 0) {
                  array_push($category_arr,$reid);
                  // 继续判断是否为二级分类
                  $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
                  $this->dsql->Execute();
                  if(($reid = $this->dsql->GetObject()->reid) != 0) {
                    array_push($category_arr,$reid);
                    // 继续判断是否为二级分类
                    $this->dsql->SetQuery("SELECT reid FROM `#@__arctype` WHERE id in($reid) group by reid ");
                    $this->dsql->Execute();
                  }
                }
              }
            }
          }

此处写得有点糟糕,循环,我因为只有四级就先这么简单写

然后在$admin_catalogs = array_unique($admin_catalogs);后添加一行

$admin_catalogs = array_unique($category_arr);
原文地址:https://www.cnblogs.com/easy1996/p/8856879.html