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