2013-06-25 147 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的,我所有的耳朵一些設置獲得管理員權限要麼! –