ユーザーとグループの関連
ユーザーとグループは、それらの間にメンバーとオーナーという 2 つの関連を持っています。ユーザーとグループは、それぞれ双方向のリンクで関連付けられています。
グループに対するメンバーの追加や削除、ユーザーやグループそのものの削除を行うと、これらの双方向の関連は Kii Cloud によって自動的に更新されます。
メンバー
メンバーはグループの構成要員となるユーザーです。あるグループのメンバーとなっているユーザーは、デフォルトでそのグループのデータ(グループスコープの Bucket にある KiiObject)にアクセスできます。
オーナー
オーナーとはそのグループの所有者のことで、初期状態はそのグループを作成したユーザーです。オーナーとなったユーザーは、メンバーの追加や削除などの機能を実行できます(詳細は グループの操作権限 をご覧ください)。
あるグループのオーナーは、常にそのグループのメンバーでもあります。
REST API を使うと、グループオーナーを変更 できます。オーナーを指定した場合は自動的にそのグループのメンバーにもなります。
ユーザーとグループの関連
メンバーとオーナーは、ユーザーとグループの間で双方向の関連として表現されます。
Kii Cloud SDK では、KiiUser
クラスと KiiGroup
クラスのそれぞれで、メンバーとオーナーの関係を返すメソッドを用意しており、図のようにお互いのオブジェクトを指します。
各メソッドでの多重度は図のとおりです。多重度の表記は UML と同様に、「0..*」が 0 以上の多数、「0..1」が 0 または 1 を表しています。グループからみたオーナーユーザーが 1 件またはなしとなる以外は、0 件以上の多重度となります。
-
KiiUser
のmemberOfGroups()
メソッドで、そのKiiUser
がメンバーとして参加しているKiiGroup
の一覧を取得できます。グループに 1 つも所属していないユーザーでは、空の一覧を返します。 -
KiiUser
のownerOfGroups()
メソッドで、そのKiiUser
がオーナーとして登録されているKiiGroup
の一覧を取得できます。オーナーは、そのグループのメンバーでもあるため、ownerOfGroup()
が返したKiiGroup
は、必ずmemberOfGroups()
の結果に含まれます。グループを 1 つも所有していないユーザーでは空の一覧を返します。 -
KiiGroup
のlistMembers()
メソッドで、そのKiiGroup
に所属しているメンバー(KiiUser
)の一覧を取得できます。KiiUser
のmemberOfGroups()
の逆方向の関連です。 -
KiiGroup
のgetOwner()
メソッドで、そのKiiGroup
のオーナーとなるユーザーを取得できます。グループのオーナーは 1 人だけのため、このメソッドは単一のKiiUser
を返します。KiiUser.ownerOfGroups()
の逆方向の関連です。
なお、オーナーだけが所属するグループで、オーナーのユーザーを削除した場合、そのグループはメンバーが誰もいないことになります。このとき listMembers()
は空の一覧を、getOwner()
は null を返します。詳細は ユーザー削除時のグループ を参照してください。
ユーザーとグループの関連の例
次の 3 つの操作を行った結果を下記の図に示します。
「阿田」さんが「営業部」を作成(赤色の関連)
「阿田」さんが「営業部」にメンバー「井田」さんを追加(青色の関連)
「井田」さんが「テニス同好会」を作成(緑色の関連)
図からは、ユーザーとグループの関連は、すべての箇所で対称になっている点が読み取れます。
ただし、それぞれの関連は対称であっても、一覧のメソッドが返す件数はユーザーとグループで同一にはなりません。たとえば、「井田」さんの memberOfGroups()
は「営業部」と「テニス同好会」の 2 つを指していますが、「テニス同好会」の listMembers()
は「井田」さんに対する 1 件のみです。また「営業部」の listMembers()
は「井田」さんのほか、「阿田」さんも指しています。
実装時には、KiiUser
と KiiGroup
のどちらから見た一覧であるかを意識しておく必要があります。
グループ一覧によるグループの参照
ユーザーからのグループの一覧取得機能を使用すると、URI や ID を使って グループを参照 する方法以外に、グループを参照することができます。
ログイン中または特定の KiiUser
から、memberOfGroups()
メソッドを使って KiiGroup
の一覧を取得することで、そのユーザーに関連があるグループを取得できます。グループを取得後、グループスコープの KiiObject にアクセスしたり、グループのメンバー一覧を取得したりして目的の操作を実現できます。
取得したグループの意味付けはモバイルアプリに作り込む必要があります。グループの一覧を取得しただけでは、単純にその KiiUser と関連がある KiiGroup
が取得されるだけで、それらがモバイルアプリでどのような役割を持つかは判断できません。たとえば、モバイルアプリに掲示板機能とグループチャット機能がある場合、掲示板用の KiiGroup
とグループチャット用の KiiGroup
はグループの取得結果だけで区別できません。これらをグループ名などで目的別に使い分けるには、モバイルアプリ側のプログラムで作り込む必要があります。