vBulletin 4 通过外部 php-application 获取线程权限

Posted

技术标签:

【中文标题】vBulletin 4 通过外部 php-application 获取线程权限【英文标题】:vBulletin 4 Fetch thread permissions by external php-application 【发布时间】:2015-03-13 01:53:23 【问题描述】:

我正在编写一个插件来在外部应用程序中显示 vBulletin 4 论坛的最新线程/帖子。两个系统都在同一个域上运行,因此我能够在外部应用程序中获取用户的 vB 会话。因为 vB 论坛有一些具有特殊权限的论坛(例如员工的内部论坛),所以我只想显示至少允许用户阅读的线程。

我发现可以这样做:

$notAccessableForums = array();
foreach($vbulletin->forumcache as $forumId => $forumInfo) 
    // User need at least view-access
    $userCanViewForum = $vbulletin->userinfo['forumpermissions'][$forumId] & $vbulletin->bf_ugp_forumpermissions['canview'];
    if(!$userCanViewForum) 
        $notAccessableForums[] = $forumInfo['forumid'];
    

$notAccessableForums 将是当前用户无法访问的所有 forumId 的数组。这可以很容易地用于在 SELECT 语句中为线程排除它们,例如

$query = 'SELECT title [...] 
FROM thread 
WHERE forumid NOT IN(' . implode(',', $notAccessableForums) . ');';

这些解决方案的问题是论坛列表和用户的论坛权限需要 vB 核心。由于以下原因,我不想包含核心:

    它使我的插件不灵活,因为它需要访问 vB 板的文件 当我在我的网站中包含 vB-Core 时,它​​会变慢,因为上面已经有一个 CMS,而且 vBulletin-Core 真的很大,会导致性能不佳 我希望我的插件是独立的(尽可能)

我查看了vB源代码,发现论坛权限被序列化存储在datastore表中(这也是一个非常大的数组,因为还有很多其他信息我没有存储需要像统计数据,关系等)。但我不知道如何在论坛上获得用户特定的权限。

换句话说:我需要存储在 vB var $vbulletin->userinfo['forumpermissions'][$forumId] 中的位域,以便我可以在我的班级中将 $vbulletin->bf_ugp_forumpermissions['canview'] 定义为常量,并从数据库中获取所有论坛的列表以检查其中哪些是当前用户无法查看。

【问题讨论】:

【参考方案1】:

这里是 vbulletin4 和 VB5 最新帖子的完整文章以及 htmlphp 站点的 cmets

http://thearfan.com/vbulletin-latest-post-for-htmlphp-sites/

【讨论】:

您甚至没有阅读问题的标题...您的插件不关心访问权限,就像 vBulletin XML-API 一样。此外,这是一个巨大的混乱:糟糕的编码风格,向用户显示数据库错误以及在小部件中破坏整个站点的数据库错误至少在生产中是不可接受的,例如使用已弃用多年的 API 等等。无法相信这项工作来自您页面上声称的真正的软件工程师。看起来像是程序员的第一步。 有一个config.php文件需要数据库设置。 第二个我正在使用的 API 已经过测试,我目前正在为 vb5 使用。

以上是关于vBulletin 4 通过外部 php-application 获取线程权限的主要内容,如果未能解决你的问题,请参考以下文章

vBulletin 等脚本如何在不使用 cron 作业的情况下启动定期维护作业?

PHP vBulletin模板挂钩

Vbulletin Used to Show Malicious Advertisements

MySql 错误 1093 尝试使用两个数据库和两个表进行更新

如何通过单击菜单外部来关闭移动菜单

单片机扩展中断的4种方法