Drupal"您无权访问此页面"

时间:2017-07-05 01:06:08

标签: php drupal drupal-7

我已经从MIA开发者手中接管了我们的网站,并花了一天时间试图找到这个答案。

升级到v 7.56后,我无法以管理员身份访问的页面列表中只有一个特定页面。 (不幸的是,它可能是我们管理员面板中最需要的报告)。

以下是我所知道的:

  • Drupal版本7.56
  • PHP 7.0.20
  • 运行状态报告时没有错误
  • Chron - 没有错误

这就是我所做的:

  1. 添加了$ cookie_domain =' .example.com&#39 ;; to settings.php
  2. 清除了浏览器缓存和Cookie
  3. 确保管理员可以访问所有内容
  4. 清除网站缓存
  5. 确保页面上的代码与我更新之前的代码完全相同
  6. 不确定该做什么或从哪里开始。非常感谢任何帮助。

    更新:以超级管理员身份登录时,收到HTTP 500错误。经过更多的研究,我更新了php.ini以包含memory_limit = 64M; 现在我可以将该页面视为超级拉丁语,但它仍然无法供其他管理员使用。

    Image 1: viewing page as admin

    Image 2: viewing page as superadmin

    function custom_reports_menu() {
    
        $items['administration/upcoming-classes'] = array(
        'title' => 'Upcoming Classes',
        'page callback' => 'custom_reports_upcoming_classes_page',
        'access callback' => 'user_access',
        'access arguments' => array('admin wdcc reports'),
            'file' => 'includes/custom_reports.upcoming-classes.inc',
        'type' => MENU_CALLBACK,
        );
    
        $items['administration/class-details'] = array(
        'title' => 'Class Details',
        'page callback' => 'custom_reports_class_details_page',
        'access callback' => 'user_access',
        'access arguments' => array('admin wdcc reports'),
            'file' => 'includes/custom_reports.class-details.inc',
        'type' => MENU_CALLBACK,
        );
        return $items;
    
    }
    
    function custom_reports_upcoming_classes_page() {
    
        drupal_add_css(base_path().path_to_theme().'/assets/css/outburst-accounts.css', array('type' => 'external'));
    
        global $user;
        $uid = $user->uid;
    
        $output = '';
    
        $upcoming_classes = custom_reports_get_upcoming_classes();
        $attendee_count = custom_reports_get_attendee_count();
    
        // upcoming classes
        $output .= '<h2>Upcoming Classes</h2>';
        $output .= custom_reports_format_upcoming_classes($upcoming_classes, $attendee_count);
    
        return $output;
    }
    
    function custom_reports_permission() {
    
      return array(
        'admin wdcc reports' => array(
          'title' => t('Admin WDCC Reports'),
          'description' => t('Perform administration tasks for WDCC.'),
          //'cache' => DRUPAL_NO_CACHE,
        ),
      );
    }
    
    function custom_reports_get_upcoming_classes() {
    
        $today = date('Y-m-d');
    
        $x = 0;
        $classes = '';
    
        // get classes from new db tables
        $today = date('Y-m-d H:i:s');
    
        $result = db_query("SELECT n.nid FROM node n, field_data_field_date fdfd WHERE n.status = :status AND n.type = :type AND n.nid = fdfd.entity_id AND fdfd.field_date_value >= :today ORDER BY fdfd.field_date_value ASC", array(':status' => 1, ':type' => 'public_class_date', ':today' => $today));
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
    
                $nid = $row->nid;
                $node = node_load($nid);
    
                $product_id = $nid;
                $product_title = $node->title;
                $product_type = 'public_class_date';
                $product_date = $node->field_date[$node->language][0]['value'];
                $product_datestamp = strtotime($product_date);
                //$product_datestamp = strtotime($product_date);
    
                // set vars
                $classes[$x]['product_id'] = $product_id;
                $classes[$x]['product_title'] = $product_title;
                $classes[$x]['product_type'] = $product_type;
                $classes[$x]['product_date'] = $product_date;
                $classes[$x]['product_datestamp'] = $product_datestamp;
    
                $x++;
            }
        }
    
        return $classes;
    }
    
    function custom_reports_get_attendee_count() {
    
        $attendees = array();
        $old_attendees = array();
        $new_attendees = array();
    
        $result = db_query("SELECT itemID, attendeeID, attendeeName FROM wdcc_old_attendee");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $item_id = $row->itemID;
                $attendee_id = 'B'.$row->attendeeID;
                $attendee_name = $row->attendeeName;
    
                $old_attendees[$item_id][$attendee_id]['old_attendee_id'] = $attendee_id;
    
                if (strpos($attendee_name, '&') > 0 || strpos($attendee_name, ' and') > 0) { // couples
                    $old_attendees[$item_id][$attendee_id]['total_attendees'] = 2;
                } else {
                    $old_attendees[$item_id][$attendee_id]['total_attendees'] = 1;
                }
            }
        }
        if (is_array($old_attendees)) {
            $connect_class_ids = custom_accounts_connect_class_ids();
            foreach ($old_attendees as $old_item_id => $attendee_list) {
                if (isset($connect_class_ids[$old_item_id])) {
                    $product_id = $connect_class_ids[$old_item_id];
                    foreach ($attendee_list as $attendee_id => $attendee) {
                        $old_attendee_id = $attendee['old_attendee_id'];
                        $attendees[$product_id][$old_attendee_id]['total_attendees'] = $attendee['total_attendees'];
                    }
                }
            }
        }
        $result = db_query("SELECT id, product_id FROM wdcc_attendees WHERE transaction_id > 0");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $attendee_id = $row->id;
                $product_id = $row->product_id;
                $attendees[$product_id][$attendee_id]['total_attendees'] = 1;
            }
        }
        $cancelled_attendees = array();
        $result = db_query("SELECT * FROM wdcc_attendees_cancelled");
        if ($result->rowCount() > 0) {
            foreach ($result as $row) {
                $attendee_id = $row->attendee_id;
                $old_attendee_id = 'B'.$row->old_attendee_id;
    
                if ($attendee_id > 0) {
                    $cancelled_attendees[] = $attendee_id;
                } else {
                    $cancelled_attendees[] = $old_attendee_id;
                }
            }
        }
        foreach ($attendees as $product_id => $product_attendees) {
            foreach ($product_attendees as $attendee_id => $attendee) {
                if (in_array($attendee_id, $cancelled_attendees)) {
                    unset($attendees[$product_id][$attendee_id]);
                }
            }
        }
        $attendee_count = array();
        foreach ($attendees as $product_id => $product_attendees) {
            foreach ($product_attendees as $attendee_id => $attendee) {
                if (!isset($attendee_count[$product_id])) {
                    $attendee_count[$product_id] = $attendee['total_attendees'];
                } else {
                    $attendee_count[$product_id] = $attendee_count[$product_id] + $attendee['total_attendees'];
                }
            }
        }
    
        return $attendee_count;
    }
    
    function custom_reports_format_upcoming_classes($upcoming_classes, $attendee_count) {
    
        $output = '';
    
        if (is_array($upcoming_classes)) {
            $output .= '<div class="table-responsive table-container">';
            $output .= '<table class="table">';
            $output .= '<tr><td>Class</td><td>Guests</td><td>Actions</td></tr>';
            foreach ($upcoming_classes as $class) {
                $nid = $class['product_id'];
                $node_url = url('node/'.$nid, array('absolute' => TRUE));
                $attendees = 0;
                if (isset($attendee_count[$nid])) {
                    $attendees = $attendee_count[$nid];
                }
    
                $output .= '<tr><td><a href="'.$node_url.'">'.$class['product_title'].'</a><br />'.date('m/d/Y - g:i A', $class['product_datestamp']).'</td><td>'.$attendees.'</td><td><a href="/administration/class-details/'.$class['product_id'].'">View roster</a></td></tr>';
            }
            $output .= '</table>';
            $output .= '</div>';
        } else {
            $output .= '<p>No upcoming classes found.</p>';
        }
    
        return $output;
    }
    

3 个答案:

答案 0 :(得分:0)

可能需要更多信息,但似乎是自定义或硬编码权限的情况。

以下是潜在的案例:

  • 将所有角色分配给管理员用户
  • 搜索此网页网址的自定义模块。查看页面是否仅允许某些用户访问此页面。
  • 如果报告是Drupal View,请找到此视图并检查权限部分。

答案 1 :(得分:0)

在当前菜单项中,您以错误的方式使用访问回调属性。您的菜单项不需要指定访问回调。只有访问参数就足够了。

请添加只有管理员才能访问的访问权限参数。

“访问回调”:如果用户具有对此菜单项的访问权限,则返回TRUE的函数,否则返回FALSE。它也可以是布尔常量而不是函数,您也可以使用数值(将转换为布尔值)。默认为user_access(),除非从父菜单项继承值;只有MENU_DEFAULT_LOCAL_TASK项才能继承访问回调。要使用user_access()默认回调,您必须指定要检查为“访问参数”的权限(见下文)。

来源:https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7.x

答案 2 :(得分:0)

settings.php 文件

中替换以下代码

PHP变量名:

$cookie_domain = 'example.com';(第340行)