Drupal 7自定义模块给出了403

时间:2012-08-16 13:38:20

标签: php drupal drupal-7

我的自定义drupal 7模块遇到了一些麻烦。请注意,这不是我的第一个模块。这是我的hook_menu;

function blog_contact_menu(){
    $items = array();
    $items["blog_contact/send_to_one"] = array(
    "page_callback"=>"single_blogger_contact",
    "access_arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
    );
    return $items;
}

这是我的烫发功能;

function blog_contact_perm() {
    return array("access blog_contact content");
}

这应该可行但是当我进行ajax调用时,它会禁止403。您无权查看bla bla。我的ajax调用是正确和简单的,url是正确的,类型是post。我没有直接看到原因。

2 个答案:

答案 0 :(得分:4)

菜单路由器项目中的属性中包含空格而不是下划线。 access_arguments实际应该是access argumentspage_arguments应该是page arguments等等:

function blog_contact_menu(){
  $items = array();
  $items["blog_contact/send_to_one"] = array(
    "title" => "Title",
    "page callback"=>"single_blogger_contact",
    "access arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
  );
  return $items;
}

另请注意,title是必需属性。

除此之外,已经提到过hook_permission()问题,您的代码就是现货。

答案 1 :(得分:0)

由于您未在hook_menu实施中指定access_callback,因此默认使用user_access功能并检查您是否access blog_contact content许可授予。

function blog_contact_menu(){
    $items = array();
    $items["blog_contact/send_to_one"] = array(
    // As mentioned in Clive's answer, you should provide a title 
    "title" => "Your Title goes here",
    "page callback"=>"single_blogger_contact",
    // No "access callback" so uses user_access function by default
    "access arguments"=>array("access blog_contact content"),
    "type"=>MENU_CALLBACK
    );

access blog_contact content不是Drupal知道的权限,因此user_access函数返回false,这就是您拒绝访问403访问权限的原因。

如果你想告诉Drupal关于access blog_contact content权限,那么钩子是hook_permission,而不是hook_perm

你的代码应该更像:

function blog_contact_permission() {
  return array(
    'access blog_contact content' => array(
      'title' => t('Access blog_contact content'), 
      'description' => t('Enter your description here.'),
    ),
  );
}