【问题标题】:Drupal: why can't user admin access my module pages?Drupal:为什么用户管理员不能访问我的模块页面?
【发布时间】:2010-12-28 23:41:07
【问题描述】:

我正在开发一个 drupal 6.x 模块,该模块由 .module 页面中定义的多个页面组成。问题是当我以管理员身份访问这些页面时,我被拒绝访问。我认为管理员(用户 1)可以访问任何东西?以下是部分页面的代码:

function foobar_menu()
{
 $items['admin/foobar'] = array(
   'title' => 'administer foobar',
   'page callback' => 'foobarpage',
 );

 $items['admin/foobar/baz'] = array(
   'title' => 'Do baz',
   'page callback' => 'drupal_get_form',
   'page arguments' =>array('foobarpage'),
 );

那么我如何确保只有管理员才能看到这些页面,而其他人会收到“页面不存在”错误?

编辑:我找到了解决方案here

【问题讨论】:

    标签: php drupal drupal-6


    【解决方案1】:

    您需要为每个菜单项定义access arguments

    请参阅 drupal.org documentation 了解此主题。

    例如,你的 hook_menu 可能看起来像这样:

    $items['admin/foobar'] = array(
        'title' => 'administer foobar',
        'page callback' => 'foobarpage',
        'access arguments' => array('administer site configuration'),
    );
    

    【讨论】:

    • 但是管理员不能有权限分配给他,对吧?我的意思是,权限页面上没有管理员列。
    • 管理员始终拥有所有权限。如果您只希望管理员拥有“管理站点配置”权限,请不要将其分配给其他任何人。
    • 斯科特是正确的。在任何情况下,我都不会养成向您网站上的随机人提供上述许可的习惯。如果您相信他们会更改站点配置,那么您肯定相信他们会访问您的模块页面。如果那只是用户#1,那就这样吧。
    • 但我不希望其他用户访问这些页面,只是管理员。如果管理员默认具有该访问权限,为什么我以管理员身份登录时不能使用这些页面?
    • 您应该使用 hook_perm 来定义一个新权限(例如“administer foobar”),并且只将该权限授予您想要管理 foobar 的用户。如果您(例如 uid 1)是唯一的人,则不要将该权限授予任何人。无论哪种情况,定义“访问参数”都是关键。
    【解决方案2】:

    wiifm 的回答是正确的,但另一种选择(如果您不想使用“管理站点配置”)是创建一个自定义访问回调函数来检查 uid == 1 或创建一个自定义 priv。

    我不知道什么最适合您的情况,但您可能希望按照 wiifm 的建议进行操作。

    【讨论】:

    • 但我不希望其他用户访问这些页面,只是管理员。如果管理员默认具有该访问权限,为什么我以管理员身份登录时不能使用这些页面?
    【解决方案3】:

    当您说管理员时,您的意思是您创建的第一个用户或您授予所有权限的特定用户。无论如何,正如wiifm上面所说,即使对于管理员,您也必须在菜单项中添加“访问参数”条目,一旦您这样做,如果您按照wiifm所说的进行操作,您应该能够使用管理员访问菜单项而不是与任何其他用户(除非您将该权限授予其他用户,这是不太可能的)。

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多