SuiteCRM 修改菜单后报 500 错误,管理员无法进入系统

文章目录

    在使用 SuiteCRM 管理员在后台配置菜单,选择将所有菜单隐藏。。。不要问为什么,就是这样配置了。

    然后管理员再也无法使用 SuiteCRM 了,登录之后就报 500 错误,无法使用,也无法恢复之前的配置。
    其他用户倒是可以正常登录。

    报错信息

    从日志看起来确实是找不到菜单,导致报错:

    FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, null given in suitecrm/include/GroupedTabs/GroupedTabStructure.php:85
    Stack trace:
    suitecrm/include/GroupedTabs/GroupedTabStructure.php(85): in_array()
    suitecrm/include/MVC/View/SugarView.php(629): GroupedTabStructure->get_tab_structure()
    suitecrm/include/MVC/View/SugarView.php(202): SugarView->displayHeader()
    suitecrm/include/MVC/Controller/SugarController.php(432): SugarView->process()
    suitecrm/include/MVC/Controller/SugarController.php(363): SugarController->processView()
    suitecrm/include/MVC/SugarApplication.php(101): SugarController->execute()
    suitecrm/index.php(52): SugarApplication->execute()
    {main}
    thrown in suitecrm/include/GroupedTabs/GroupedTabStructure.php on line 85" while reading response header from upstream, request: "GET /index.php?module=Home&action=index HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php8.1-fpm.sock:", referrer: "https://xxx/index.php?action=Login&module=Users&login_module=Home&login_action=index"
    

    数据库

    直接通过数据库很难定位,因为有上百张表,找到了几个感觉相关的表。尝试修改了一些配置,还是没有解决。

    user_preferences 表看起来有相关性,而且修改时间也跟操作时间相契合,但是修改了一堆配置,依旧无效。下面会提到。

    displayHeader

    无奈看看代码,也是没有头绪。

    include/MVC/View/SugarView.php(202): SugarView->displayHeader()
    include/MVC/View/SugarView.php(629): GroupedTabStructure->get_tab_structure()
    
     612                 require_once('include/GroupedTabs/GroupedTabStructure.php');
     613                 $groupedTabsClass = new GroupedTabStructure();
     614                 $modules = query_module_access_list($current_user);
     615
     616                 //handle with submoremodules
     617                 $max_tabs = $current_user->getPreference('max_tabs');
     618                 // If the max_tabs isn't set incorrectly, set it within the range, to the default max sub tabs size
     619                 if (!isset($max_tabs) || $max_tabs <= 0 || $max_tabs > 10) {
     620                     // We have a default value. Use it
     621                     if (isset($GLOBALS['sugar_config']['default_max_tabs'])) {
     622                         $max_tabs = $GLOBALS['sugar_config']['default_max_tabs'];
     623                     } else {
     624                         $max_tabs = 8;
     625                     }
     626                 }
     627
     628                 $subMoreModules = false;
     629                 $groupTabs = $groupedTabsClass->get_tab_structure(get_val_array($modules));
     630                 // We need to put this here, so the "All" group is valid for the user's preference.
     631                 $groupTabs[$app_strings['LBL_TABGROUP_ALL']]['modules'] = $fullModuleList;
    

    YTowOnt9

    base64 解码后是:

    a:0:{}
    

    哪些记录受影响

    select * from suitecrm.user_preferences where assigned_user_id = 1 and contents = "YTowOnt9";
    

    共 12 行记录需要确认。

    • ETag:TODO 无参考项

    • Dashboard:TODO 无参考

    • Opportunities:TODO

    • SecurityGroups:时间戳,pass

    • Users:没有其他用户的参考,但从时间戳看,也不是修改项,pass

    • Emails:都是一样的空,pass

    • ModuleBuilder:时间戳,pass

    • Assistant: TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

    • AOS_Products:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

    • AOS_Contracts:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

    • AOR_Reports:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

    • ACLRoles:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

      select * from suitecrm.user_preferences where assigned_user_id = 1 and category in ("AOS_Products", "AOS_Contracts", "AOR_Reports");
      

    从 github 代码库中查找初始值

    没有找到。

    最后

    很无奈,只能重新部署了。

    感觉这样排查下去,可能一天也不能搞定(大周末早上我已经排查了3个小时)。而我手头还有其他紧急的项目。

    所以干脆重新部署。

    部署之后,做个数据库备份。

    浪费生命!

    重新部署

    • 备份 themes 目录:themes/SuiteP/tpls

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式