2010-09-03 56 views
2

我正在写这个令人遗憾的希望,有人已经做了类似的事情。我会在drupal.org上发布 - 但该网站的用户友好程度与西红柿的踢球率相同。Drupal - 按角色检查所有站点路径的安全

我不了解你,但是当我开发时,我将所有Drupal路径以开放访问的方式离开,然后考虑在最后使用访问权限锁定它们。

什么是真正有用的是分析所有可用的路径(由基本解构menu_router表的内容),然后尝试他们一个模块(卷曲?)又同时登录与一个给定用户给定一组角色。

输出将是一个简单的HTML页面,说明哪些路径可访问,哪些不可访问。

我几乎不愿意这样做,但如果有人知道任何模糊的事情,我会非常感激地听到它。

干杯

UPDATE
在从Yorirou一个伟大的想法,我敲起来一个简单的模块,以提供我一直在寻找的输出。

你可以在这里代码:http://github.com/hymanroth/Path-Lockdown

+0

把模块到Drupal.org :) – tamasd 2010-09-04 21:03:50

+0

我试过了,但他们拒绝给我一个CVS账户。 – 2010-09-05 10:54:05

回答

1

我第一次尝试是这样的函数:

function check_paths($uid) { 
    global $user; 
    $origuser = $user; 
    $user = user_load($uid); 

    $paths = array(); 
    foreach(array_keys(module_invoke_all('menu')) as $path) { 
    $result = menu_execute_active_handler($path); 
    if($result != MENU_ACCESS_DENIED && $result != MENU_NOT_FOUND) { 
     $paths[$path] = TRUE; 
    } 
    else { 
     $paths[$path] = FALSE; 
    } 
    } 

    $user = $origuser; 

    return $paths; 
} 

这是很好的一个第一次,但它不能(在菜单路径%)处理通配符路径。加载所有可能的值可以是一个选项,但它不适用于所有情况。例如,如果你有%node,那么你可以使用node_load,但是如果你只有%,那么你不知道要加载什么。另外,为了正确处理没有参数的情况(例如,显示所有元素),省略最后一个参数(这是一个变量)是一种常见做法。

此外,将此解决方案与Drupal测试系统集成可能是一个好主意。

+0

好主意Yorrou!我用你的代码作为模块的基础。有关详细信息,请参阅我的更新回答另外,'%'不是问题,因为我们只测试访问路径,而不是路径本身是否有效。 – 2010-09-04 16:47:55

1

我做了一些调查,没能发现任何东西。尽管我倾向于认为有一种方法可以通过Drupal API而不是CURL来检查路径访问 - 但请保持我最新的进展情况/让我知道你是否想要帮助开发。这对于Drupal模块来说是一个很好的补充。

+0

是的,CURL是不必要的。我写了一个模块来生成我正在寻找的输出,查看我的更新答案以获取详细信息。 – 2010-09-04 16:46:06