为了确保我的网站安全且所有权限设置正确,我正在寻找一种方法来生成特定用户有权访问的每个页面的列表。(所以......每个菜单回调都user_access()
返回TRUE
给定的uid)。
看起来像这样的东西:
$user->uid == 0
家
相片
联系我们
$user->uid = 23
家
相片
联系我们
论坛
博客
等等
这在 Drupal 中是不可行的,因为从系统的角度来看没有真正的页面,只有带参数的回调函数。为了澄清,请考虑节点页面的标准路径:
node/[nid]
这将接受 [nid] 的任意整数,然后node/%
路径的回调函数将尝试找到具有匹配 id 的节点 - 只有在找到它之后,Drupal 才“知道”页面是否实际存在。
对于所有其他路径也是如此,因此基本上您正在查看(几乎)无限数量的潜在页面,没有办法知道,除非测试路径,如果它们实际上“存在”或以 404 结尾。
你能做的就是看看menu_router
桌子。在那里您会找到所有已注册的路径,以及它们的回调和 access_callback 函数。对于那些您可以按用户进行检查的人,但结果很难解释,因为路径很多并且包含许多占位符。
如果您使用 URL-Aliases/pathauto,则存在类似的选项。然后你可以拿url_alias
桌子检查那里的所有条目。但是由于您有兴趣保护您的网站,这并没有真正的帮助,因为您会错过任何没有别名的路径 - 如上所述,这些路径不计其数。