如何在Ejabberd或MongooseIM中向其他用户隐藏一组用户?

时间:2019-03-27 06:09:40

标签: xmpp ejabberd privacy mongoose-im

假设我在RDBMS数据库中拥有10,000个用户名,该用户名将使用XMPP聊天服务,例如Ejabberd或MongooseIM,我将手动将其输入数据库中。现在,上述10,000个用户名中的每1000个用户名的JID用户名中都有固定前缀,例如:

1-1000个用户名以aa__开头(示例-aa10001,aa10002 ...)

1001-2000用户名以bb__开头(示例-bb10001,bb10002等)

2000-3000用户名以cc__开头(示例-cc10001,cc10002等)

以此类推...总共10个不同的前缀用户名

现在,我只希望这10个不同的对不能知道其他前缀用户名对,并且不能将任何类型的节(例如消息,状态,IQ)发送给其他对(具有不同的前缀)

可能性:

  1. 如果我可以在阻止策略中使用一些正则表达式,那将比阻止个人更好。

  2. 我知道您可能建议为每对使用不同的虚拟主机。但是管理如此多的虚拟主机可能很困难,因为在上面的示例中10K只是大局的一个小例子。

如果您不清楚您的问题,请告诉我?

1 个答案:

答案 0 :(得分:1)

  

我只希望这10对不同的对不能知道其他前缀用户名对,并且不能将任何类型的节(例如消息,状态,IQ)发送给其他对(具有不同的前缀)

首先,使用mod_filter。查看其示例配置,也许您可​​以使用它来完成所需的工作: https://github.com/processone/ejabberd-contrib/tree/master/mod_filter

也许您可以基于用户名模式(“ aa *”或类似名称)定义ACL,这样您就可以将所有用户都放在一个虚拟主机中。

如果唯一的解决方案需要为每个用户组都拥有一个虚拟主机,则有些想法:

  

现在,在上述10,000个用户名中,每1000个用户名的JID用户名中都有固定前缀,例如:

正如您提到的,您可以在ejabberd中为每个用户组定义一个虚拟主机:10001@aa.example.com ...或为了不更改现有用户名:aa10001@aa.example.com ...

  

也许我可以以某种易于管理的方式使用虚拟主机(频繁添加新对)而无需为每个虚拟主机添加新数据库,那么这将是最好的解决方案

如果您这样配置ejabberd并在创建数据库时使用适当的* .sql文件,则可以将所有虚拟主机放在一个数据库中。

new_sql_schema: true
  

是否可以在不停止服务器的情况下在配置中动态添加虚拟主机?

是的,它应该可以工作(这是最新功能)。根据需要编辑ejabberd.yml,然后重新加载:

$ ejabberdctl reload_config