2013-06-25 4 views
1

모든 대화방 구성원이 모든 구성원의 목록을 얻도록 허용하고자합니다. 현재 운영자 인 사용자 만 그렇게 할 수 있습니다. 나는 이것을 허락하기 위해 사용자 권한을 설정/변경할 필요가있는 곳을 찾을 수없는 것 같습니다. 다음과 같은 코드가 작동하는 사회자로 로그인 한 경우aSmack muc.getMembers() 금지됨 (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) MUC MulitUserChat 인스턴스 (인스턴스화하는 데 사용되는 세션)과 연결된 사용자가 회원 목록 (I 생각을 얻을 수있는 충분한 공간 권한이 있는지 확인하지만 것을 확실하지 않다 사용자는 충분히 처리 방안에 대한 관리자 권한)

2) 1이면을 할 필요는 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을 만들면 bot에게 관리자 권한을 부여합니다. 사용자가 멤버 목록을 아래로 내리려고하면 사용자는 쿼리를 봇에 보내야하며 봇은 룸을 쿼리하고 결과를 사용자에게 전달해야합니다. 이 디자인은 방의 보안을 유지하며 즐거움을 제외하고는이 목적을 넘어서 유용 할 수 있습니다. -이 도움이 되었기를 바랍니다.

+0

안녕하세요. @ Scott- 답변 해 주셔서 감사합니다. 관리자 권한 프로세스를 자동화하는 방법이 있습니까? 예를 들어, 저는 현재 새로운 사용자가 Form registrationForm = muc.getRegistrationForm()에 의해 멤버가 될 수 있도록 설정했습니다. 양식 answerForm = registrationForm.createAnswerForm(); answerForm.setAnswer ("muC# register_first", "name"); \t \t answerForm.setAnswer ("muC# register_roomnick", USERNAME) muc.sendRegistrationForm (응답 폼); –

+0

사용자가 묻는 것인지 확실하지는 않지만 instance.grantAdmin (String jid) 또는 instnace.grantAdmin (Collection jids)을 호출하여 MulitUserChat 인스턴스로 모든 사용자 또는 사용자 모음 권한을 부여 할 수 있습니다. 인스턴스 작성자 권한을 instance.grantModerator (String nickName) 및 인스턴스에 부여하는 경우에도 동일한 작업을 수행 할 수 있습니다.grantModerator (콜렉션 닉네임) -이게 당신이 찾고있는 것이 아닌지 알려주세요. – Scott

+0

나는 두 가지 방법 모두가 관리자 사용자에 의해서만 호출 될 수 있다고 생각합니다. 내가 원하는 것은 a) 사용자가 a) 회원 목록을 얻거나 b) 모든 사람의 목록을 통해 chatroom을 사용할 수있는 방법입니다. a) 또는 b)는 자율적으로 수행 될 수 있어야합니다. 사용자가 양식 제출 또는 Openfire의 일부 설정으로 관리자 권한을 자동으로 갖도록하는 방법이 있다면 나는 모든 귀입니다! –