2013-06-25 61 views
1

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

如果登录的主持人下面的代码工作:

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

如果记录在作为一个正常的构件,上面的代码抛出一个禁止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) 

任何意见将不胜感激。

+0

请注意,[MUC成员](http://xmpp.org/extensions/xep-0045.html#roles-default)与加入房间的实体不同。我想你想要一个当前在MUC中的所有实体的列表,对吗? – Flow

+0

嗨@Flow,不,我想要一个所有MUC成员的列表,或者是所有实体在MUC中的列表。尽管出现了上述问题,但我认为我可以通过在每个新参加者加入时注册成为会员来实现后者。 –

回答

2

两个建议:

1)确保与用于实例化MulitUserChat实例(MUC会话)相关联的用户有足够的空间权限,才能使成员名单(我想,但我不知道的是,用户需要为房间如果1管理员权限)

2)充分处理请确保您所呼叫SmackAndroid.init(上下文的背景下)

希望这有助于!

- 关于你的最后一个注释 -

我失去了原来的问题的视线道歉。你是对的,这两个功能只能由管理员用户调用。没有办法(我知道)没有管理员用户的同意让会员获得管理权限。经过一番考虑后,我认为这是一个糟糕的解决方案,因为授予所有用户的管理权限会危及聊天室的安全。幸运的是,有一个更好的解决方案(它涉及更多一点):

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

+0

嘿@斯科特 - 非常感谢你的回答!有没有办法使管理权限流程自动化?例如,我现在已经设置好了,以便新用户可以通过Form registrationForm = muc.getRegistrationForm()成为成员。表单answerForm = registrationForm.createAnswerForm(); answerForm.setAnswer(“muc#register_first”,“name”); \t \t answerForm.setAnswer(“muc#register_roomnick”,USERNAME)muc.sendRegistrationForm(answerForm); –

+0

我不知道这是你问什么,但你可以通过调用instance.grantAdmin(String jid)或instnace.grantAdmin(集合jids)授予任何用户或用户集合的管理权限与MulitUserChat实例。同样的事情可以通过instance.grantModerator(String nickName)和实例来授予主持人权限。grantModerator(收藏昵称) - 让我知道这是不是你正在寻找 – Scott

+0

相信无论这些方法只能由管理员用户调用。我所寻找的是任何用户能够要么一)获得一个会员名单或b)让每个人曾经使用聊天室列表的方式。 a)或b)应该能够自主完成。如果有一种方法可以让用户自动表单提交或Openfire的,我所有的耳朵一些设置获得管理员权限要么! –