2.7. Chat nhóm (Multi-User Chat)
2.7.2. Phân quy n trong phòng
Là n i giao ti p c a nhi u th c th trên m ng, đôi khi không th tránh kh i nh ng th c th có nh ng hành đ ng gây nh h ng t i các th c th khác, nên v n đ qu n lý, phân quy n trong m t phòng là khá quan tr ng.
XMPP cung c p m t s lo i phịng, qua đó th hi n cách th c, quy đ nh tham gia c a các th c th , m t s lo i ph bi n:
Å Members-Only Room: ch nh ng th c th có trong danh sách m i có th tham gia vào phòng.
Å Open Room: t t c m i th c th đ u có th tham gia vào phịng. Å Password-Protected Room: c n m t kh u đ tham gia vào phòng.
Å Hidden Room: phịng này khơng th tìm th y b i d ch v Service Discovery.
Å Public Room: ng c l i v i Hidden Room, có th tìm ki m qua d ch v Service Discovery.
ng th i MUC cung c p m t s role và affiliation cho các th c th nh sau:
Å outcast: nh ng th c th nh n affiliation này khơng đ c phép tham gia vào phịng.
Å visitor: th c th này có th tham gia vào phịng, nh n thông đi p t các th c th khác nh ng không đ c phép g i các tin nh n.
Å participant: có kh n ng nh n và g i các thông đi p.
Å member: th c th này có th nh n, g i và tham gia vào các phòng Member-Only.
Å moderator: th c th này có th nh n, g i thơng đi p, đ ng th i có kh n ng m i các participant và visitor ra kh i phịng, có kh n ng cho phép m t s th c th khác có quy n g i thơng đi p.
Å admin: ngoài nh ng ch c n ng nh m t moderator, admin cịn có kh n ng xem thơng tin v JID c a các th c th khác trong phịng, ngồi ra cịn có kh n ng c u hình m t s ch c n ng c a phịng.
Å owner: có ch c n ng nh m t admin, ngồi ra cịn có kh n ng qu n lý các admin, thi t l p tồn b c u hình c a phịng, và có kh n ng h y
phịng.
Ví d , user01 là m t admin, user02 là m t participant, trong tr ng h p nào đó user01 mu n chuy n role c a user02 t participant xu ng còn visitor, user01 s g i m t IQ nh sau:
id=”fu82jd29”
to=”myroom@conference.test.xmpp” type=”set”>
<query xmlns=”http://jabber.org/protocol/muc#admin”> <item nick=”Teo” role=”visitor”/>
</query> </iq>
<iq from=” myroom@conference.test.xmpp” id=”fu82jd29”
to=” user01@test.xmpp/home”
type=”result”>
Phịng s thơng báo đ n t t c m i th c th bao g m c user02 v s thay
đ i role này b ng m t presence:
<presence from=” myroom@conference.test.xmpp/Teo” to=”user02@test.xmpp/school”
<x xmlns=”http://jabber.org/protocol/muc#user”> <item affiliation=”none” role=”visitor”/> </x>
</presence> …
Ngay lúc này user02 s không đ c quy n g i tin nh n lên phòng, n u c g ng g i m t thông báo l i s đ c g i v :
<message from=” user02@test.xmpp/school”
to=”myroom@conference.test.xmpp” type=”groupchat”
<body>Alo!</body> </message>
<message from=” myroom@conference.test.xmpp”
to=” user02@test.xmpp/school”
<body>Alo!</body> <error type=”auth”>
<forbidden xmlns=”urn:ietf:param:xml:ns:xmpp-stanzas”/>
</error> </message>
Trong tr ng h p mu n m i user02 ra kh i phòng, role c a user02 s đ c chuy n thành none, hành đ ng này ch tác đ ng trên nick phòng c a user02 nên, user02 hồn tồn có th tham gia l i phịng, do đó thơng th ng
affiliation c ng s đ c thay đ i thành outcast, c m hoàn toàn user02 tham gia vào phịng vì affiliation s tác đ ng lên JID c a user02.
Yêu c u user02 ra kh i phòng:
<iq from=” user01@test.xmpp/home” id=”sfb786yh”
to=”myroom@conference.test.xmpp” type=”set”>
<query xmlns=”http://jabber.org/protocol/muc#admin”>
<item nick=”Teo” role=”none”/>
</query> </iq>
<iq from=” myroom@conference.test.xmpp”
id=” sfb786yh”
to=” user01@test.xmpp/home”
type=”result”>
Thông báo đ n các th c th :
<presence from=” myroom@conference.test.xmpp/Teo” to=”user02@test.xmpp/school”
<x xmlns=”http://jabber.org/protocol/muc#user”> <item affiliation=”none” role=”none”/>
<status code=”307”/>
</presence> …
Thi t l p affiliation, không cho user02 tham gia vào phòng:
<iq from=” user01@test.xmpp/home” id=”g678juiop”
to=”myroom@conference.test.xmpp” type=”set”>
<query xmlns=”http://jabber.org/protocol/muc#admin”> <item jid=”user02@test.xmpp” affiliation=”outcast”/> </query>
</iq>
<iq from=” myroom@conference.test.xmpp”
id=” g678juiop”
to=” user01@test.xmpp/home”
type=”result”>
Thông báo đ n các th c th trong phòng:
<presence from=” myroom@conference.test.xmpp/Teo” to=”user02@test.xmpp/school”
type=”unavailable”
<x xmlns=”http://jabber.org/protocol/muc#user”>
<item jid=”user02@test.xmpp” affiliation=”outcast”/>
<status code=”301”/>
</x> </presence> …
Trong các ví d trên, thành ph n <status/> v i các giá tr code khác nhau
th hi n các lý do khác nhau, danh sách này th hi n đ y đ trong XEP-0045, sau đây là m t vài giá tr ph bi n:
Å 307: yêu c u user ra kh i phòng.