2013-06-25 3 views
1

Я хотел бы разрешить любому участнику комнаты чата получить список всех участников. В настоящее время это могут сделать только пользователи, которые являются модераторами. Кажется, я не могу найти, где мне нужно установить/изменить права пользователя, чтобы это разрешить.aSmack muc.getMembers() Запрещено (403) OPENFIRE

Если вход в качестве замедлителя следующий код работает:

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) 

Любой совет будет очень признателен.

+0

Обратите внимание, что элемент [MUC Member] (http://xmpp.org/extensions/xep-0045.html#roles-default) не совпадает с объектом, который присоединился к комнате. Думаю, вам нужен список всех сущностей, находящихся в настоящее время в MUC, правильно? – Flow

+0

Привет @Flow, нет Мне бы хотелось, чтобы список всех членов MUC, или список всех объектов, которые когда-либо были в MUC. Я думал, что смогу достичь этого позже, зарегистрировав каждого нового участника в качестве участника, когда они присоединятся, хотя вышеупомянутая проблема возникла. –

ответ

2

два предложения:

1) Убедитесь, что пользователь, связанный с сеансом используется для конкретизации MulitUserChat экземпляра (MUC) обладает достаточными полномочиями номера, чтобы получить список участников (я думаю, но я не уверен, что пользователь должен права администратора для помещения)

2) Если 1 достаточно обрабатываемые убедитесь, что вы вызываете SmackAndroid.init (контекст Context)

надеюсь, что это помогает!

- в отношении последнего комментария -

Я извиняюсь потерять из вида оригинального вопроса. Вы правы, обе функции могут вызываться только администратором. Нет никакого способа (я знаю), чтобы получить привилегии администратора с правами члена без согласия администратора. После немного большего внимания я пришел к выводу, что это плохое решение, так как предоставление прав администратора всем пользователям ставит под угрозу безопасность вашего чата. К счастью, есть лучшее решение (это немного больше задействовано):

Вы можете создать плагин (http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/plugin-dev-guide.html), который использует библиотеку botz (http://community.igniterealtime.org/docs/DOC-1130#comment-5601). После создания комнаты для муха предоставите привилегии администратора бота в комнату. Когда пользователю нужно вывести список участников, пользователь должен отправить запрос боту, бот должен запросить комнату и передать результаты пользователю. Эта конструкция сохраняет безопасность вашей комнаты, и, помимо удовольствия, боц может быть полезен помимо этой цели. - Надеюсь, это поможет.

+0

эй @ Скотт - большое спасибо за ответ! есть ли способ автоматизировать процесс привилегий администратора? Например, в настоящее время я настроен таким образом, чтобы новые пользователи могли стать членами с помощью регистрации формыForm = muc.getRegistrationForm(); Форма answerForm = registrationForm.createAnswerForm(); answerForm.setAnswer ("muC# register_first", "name"); \t \t answerForm.setAnswer ("muC# register_roomnick", USERNAME) muc.sendRegistrationForm (answerForm); –

+0

Я не уверен, что это то, о чем вы просите, но вы можете предоставить любому пользователю или коллекцию прав администратора пользователей с помощью экземпляра MulitUserChat, вызвав instance.grantAdmin (String jid) или instnace.grantAdmin (Collection jids). То же самое можно сделать, чтобы предоставить привилегии Модератора с экземпляром instance.grantModerator (String nickName) и экземпляром.grantModerator (Collection nicknames) - сообщите мне, если это не то, что вы ищете – Scott

+0

Я считаю, что оба этих метода могут быть вызваны только пользователем-администратором. То, что я ищу, - это способ ЛЮБОГО пользователя, чтобы иметь возможность: a) получить список участников или b) получить список каждого человека, который когда-либо использовал бы чат. Либо a), либо b) должны быть выполнены автономно. Если есть способ, чтобы пользователи автоматически получали привилегии администратора либо по форме, либо по какой-либо настройке на Openfire, я все уши! –