这通常不是一个“错误”,而是一个系统设计的正常现象,下面我将为您详细解释为什么这个表可能不存在,以及您应该如何处理。

(图片来源网络,侵删)
核心原因:dede_admin 表已被废弃
从 Dedecms V5.7 SP2 版本 开始,官方为了加强系统的安全性和灵活性,废弃了原来的 dede_admin 表,并引入了新的、更安全的用户权限管理机制。
原来的 dede_admin 表结构简单,只有一个 adminID(管理员ID)、userid(用户名)、pwd(密码)等字段,安全性较低。
新版本采用了基于 dede_adminuser 表和 dede_arctype(栏目表)的 “角色-权限” 分离管理模式。
新的用户权限管理是如何工作的?
在新版本中,管理员信息主要存储在 dede_adminuser 表中,而权限则通过关联其他表来实现。
主要相关表
-
dede_adminuser(管理员用户表)- 这是存放所有管理员账户的核心表。
userid: 登录用户名pwd: 加密后的登录密码uname: 管理员昵称taxis: 排序logintime: 最后登录时间loginip: 最后登录IPtypeid: 这是关键! 这个字段用于存储该管理员被授权管理的栏目ID。typeid为空或为0,则表示该管理员是超级管理员,拥有所有权限。typeid有值(如1,2,5),则表示该管理员只能管理ID为1、2、5的栏目及其子栏目。
-
dede_arctype(栏目表)- 存储了网站所有的栏目信息。
id: 栏目IDtypename: 栏目名称reid: 父栏目ID(用于构建栏目树)
-
dede_admintype(管理员角色/类型表) - 可选在一些更复杂的版本中,可能会用到这个表来定义不同的管理员角色(如“内容编辑”、“网站编辑”等),并将角色与权限关联。
权限判断逻辑
当您登录后台并执行一个操作时(比如修改文章),Dedeecms 的后台程序会这样判断权限:
- 获取当前登录的管理员信息(从
dede_adminuser表中通过userid查询)。 - 检查该管理员的
typeid字段。typeid为空或0,则直接放行,允许操作。typeid有值,则获取当前操作对象(如文章所属的栏目ID)。- 程序会判断当前操作的栏目ID是否在管理员的
typeid列表中,如果在,则允许操作;如果不在,则提示“没有权限”。
如何解决您的问题?(根据您的场景)
您遇到这个问题,可能是因为以下几种情况:
您在手动安装或迁移 Dedecms,发现后台无法登录
- 原因分析:
- 您可能使用的是旧版的数据库备份,但安装的是新版程序。
- 您可能手动创建了
dede_admin表,但新版程序不识别它。
- 解决方案:
- 删除您手动创建的
dede_admin表,它对新版系统无效。 - 确保您的数据库中存在
dede_adminuser表。 - 检查
dede_adminuser表中是否有超级管理员记录,默认情况下,超级管理员的userid通常是admin,typeid字段为空。 dede_adminuser表为空或者没有管理员,您需要通过以下SQL语句手动创建一个超级管理员:INSERT INTO `dede_adminuser` (`userid`, `pwd`, `uname`, `taxis`, `typeid`, `logintime`, `loginip`) VALUES ('admin', 'e10adc3949ba59abbe56e057f20f883e', '超级管理员', 0, '', 0, '');- 注意:
pwd字段是md5('123456')的结果,请根据您的需求修改用户名和密码,并确保密码是MD5加密后的字符串。
- 注意:
- 删除您手动创建的
您在编写代码(如插件)时,需要判断管理员权限
-
错误做法:去查询
dede_admin表。 -
正确做法:
-
引入 DedeCMS 的核心文件,获取当前登录用户的信息。
// 引入 common.inc.php require_once(dirname(__FILE__) . "/include/common.inc.php"); // 检查是否登录 if($cuserLogin->getUserID() <= 0) { die("您尚未登录,无权访问!"); } // 获取当前登录用户的管理员ID $adminid = $cuserLogin->getUserID(); // 获取管理员信息 $row = $dsql->GetOne("SELECT * FROM `dede_adminuser` WHERE `adminid` = '$adminid'"); // 判断是否是超级管理员 if(empty($row['typeid'])) { echo "您是超级管理员,拥有所有权限。"; } else { echo "您被授权管理的栏目ID是:" . $row['typeid']; // 在这里编写您的权限判断逻辑 }
-
您是从旧版升级到新版,后台登录失败
- 原因分析:旧版的数据结构(
dede_admin表)和新版程序不兼容。 - 解决方案:
- 备份数据库! 这是最重要的一步。
- 查找官方提供的 Dede-to-Dede 数据升级工具,这个工具会自动将旧版的
dede_admin表中的用户信息迁移到新版的dede_adminuser表中,并处理好密码和权限关系。 - 运行升级工具,按照提示完成数据迁移。
- 迁移成功后,您就可以用旧版的用户名和密码登录新版后台了。
| 项目 | 旧版 (V5.7 SP2 之前) | 新版 (V5.7 SP2 及之后) |
|---|---|---|
| 管理员表 | dede_admin |
dede_adminuser |
| 权限核心 | 简单的账户密码表 | 角色-权限分离,通过 typeid 字段关联栏目 |
| 超级管理员 | 存在于 dede_admin 表中 |
在 dede_adminuser 表中,typeid 字段为空 |
| 操作建议 | 如果发现没有此表,请检查是否为 新版系统,并使用正确的表 dede_adminuser。 |
请忘记 dede_admin 表。 在当前主流的 Dedecms 版本中,您需要关注的是 dede_adminuser 表,如果您遇到登录问题,请检查该表中是否存在有效的管理员记录。
