aSmack muc.getMembers()禁止(403)OPENFIRE

时间:2013-06-25 18:52:32

标签: java android openfire smack asmack

我想允许任何聊天室成员获取所有成员的列表。目前,只有主持人的用户才可以这样做。我似乎无法找到我需要设置/更改用户权限的位置以允许此操作。

如果以管理员身份登录,则以下代码有效:

 try {
                Collection<Affiliate> members = muc.getMembers();
                System.out.println(members.size());
            } catch(XMPPException e) {
                e.printStackTrace();
            }

如果以普通成员身份登录,则上面的代码会抛出Forbidden 403错误。

 06-25 19:53:51.198: W/System.err(12943): forbidden(403)
 06-25 19:53:51.208: W/System.err(12943):   at org.jivesoftware.smackx.muc.MultiUserChat.getAffiliatesByAdmin(MultiUserChat.java:1743)
 06-25 19:53:51.208: W/System.err(12943):   at org.jivesoftware.smackx.muc.MultiUserChat.getMembers(MultiUserChat.java:1657)

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

两个建议:

1)确保与用于实例化MulitUserChat实例(muc)的会话相关联的用户具有足够的空间权限来获取成员列表(我认为,但我不确定,用户是否需要房间的管理员权限)

2)如果1被充分处理,请确保您正在调用SmackAndroid.init(上下文上下文)

希望这有帮助!

- 关于你的上一次评论 -

我对丢失原始问题表示道歉。你是对的,这两个函数只能由管理员用户调用。没有管理员用户的同意,没有办法(我知道)让会员获得管理员权限。经过一番考虑,我得出结论认为这是一个糟糕的解决方案,因为授予所有用户管理员权限会损害聊天室的安全性。幸运的是,有一个更好的解决方案(它涉及更多一点):

您可以创建一个使用botz库(http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html)的插件(http://community.igniterealtime.org/docs/DOC-1130#comment-5601)。创建muc房间后,授予机房管理员权限。当用户需要下拉成员列表时,用户应该将查询发送到机器人,机器人应该查询房间并将结果转发给用户。这种设计保留了您房间的安全性,除了有趣之外,botz可以超越这个目的。 - 我希望这有帮助