1

我想允许任何聊天室成员获取所有成员的列表。目前,只有版主用户可以这样做。我似乎找不到我需要在哪里设置/更改用户权限以允许这样做。

如果以主持人身份登录,则以下代码有效:

 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)

任何建议将不胜感激。

4

1 回答 1

2

两个建议:

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

2)如果 1 得到充分处理,请确保您正在调用 SmackAndroid.init(Context context)

希望这可以帮助!

——关于你的最后评论——

我很抱歉忽略了最初的问题。您是对的,这两个功能只能由管理员用户调用。没有管理员用户的同意,(我知道)没有办法让成员获得管理员权限。经过一番考虑,我得出结论,无论如何这都是一个糟糕的解决方案,因为向所有用户授予管理员权限会损害您聊天室的安全性。幸运的是,有一个更好的解决方案(涉及更多一点):

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

于 2013-06-27T23:59:13.487 回答