没有dede-admin表

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文

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

没有dede-admin表
(图片来源网络,侵删)

核心原因: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: 最后登录IP
    • typeid: 这是关键! 这个字段用于存储该管理员被授权管理的栏目IDtypeid 为空或为 0,则表示该管理员是超级管理员,拥有所有权限。typeid 有值(如 1,2,5),则表示该管理员只能管理ID为1、2、5的栏目及其子栏目。
  • dede_arctype (栏目表)

    • 存储了网站所有的栏目信息。
    • id: 栏目ID
    • typename: 栏目名称
    • reid: 父栏目ID(用于构建栏目树)
  • dede_admintype (管理员角色/类型表) - 可选

    在一些更复杂的版本中,可能会用到这个表来定义不同的管理员角色(如“内容编辑”、“网站编辑”等),并将角色与权限关联。

权限判断逻辑

当您登录后台并执行一个操作时(比如修改文章),Dedeecms 的后台程序会这样判断权限:

  1. 获取当前登录的管理员信息(从 dede_adminuser 表中通过 userid 查询)。
  2. 检查该管理员的 typeid 字段。
    • typeid 为空或 0,则直接放行,允许操作。
    • typeid 有值,则获取当前操作对象(如文章所属的栏目ID)。
    • 程序会判断当前操作的栏目ID是否在管理员的 typeid 列表中,如果在,则允许操作;如果不在,则提示“没有权限”。

如何解决您的问题?(根据您的场景)

您遇到这个问题,可能是因为以下几种情况:

您在手动安装或迁移 Dedecms,发现后台无法登录

  • 原因分析
    1. 您可能使用的是旧版的数据库备份,但安装的是新版程序。
    2. 您可能手动创建了 dede_admin 表,但新版程序不识别它。
  • 解决方案
    1. 删除您手动创建的 dede_admin,它对新版系统无效。
    2. 确保您的数据库中存在 dede_adminuser 表。
    3. 检查 dede_adminuser 表中是否有超级管理员记录,默认情况下,超级管理员的 userid 通常是 admintypeid 字段为空。
    4. 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 表。

  • 正确做法

    1. 引入 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 表)和新版程序不兼容。
  • 解决方案
    1. 备份数据库! 这是最重要的一步。
    2. 查找官方提供的 Dede-to-Dede 数据升级工具,这个工具会自动将旧版的 dede_admin 表中的用户信息迁移到新版的 dede_adminuser 表中,并处理好密码和权限关系。
    3. 运行升级工具,按照提示完成数据迁移。
    4. 迁移成功后,您就可以用旧版的用户名和密码登录新版后台了。

项目 旧版 (V5.7 SP2 之前) 新版 (V5.7 SP2 及之后)
管理员表 dede_admin dede_adminuser
权限核心 简单的账户密码表 角色-权限分离,通过 typeid 字段关联栏目
超级管理员 存在于 dede_admin 表中 dede_adminuser 表中,typeid 字段为空
操作建议 如果发现没有此表,请检查是否为 新版系统,并使用正确的表 dede_adminuser

请忘记 dede_admin 表。 在当前主流的 Dedecms 版本中,您需要关注的是 dede_adminuser 表,如果您遇到登录问题,请检查该表中是否存在有效的管理员记录。

-- 展开阅读全文 --
头像
页如何调用tag标签?
« 上一篇 02-15
C语言图书管理系统如何实现核心功能?
下一篇 » 02-15

相关文章

取消
微信二维码
支付宝二维码

目录[+]