7. グループ管理

ここではグループ管理機能の利用方法について説明します。

7.1. グループの作成

最初にグループオブジェクトを作成します。

var group1 = new Nebula.Group("group1");

addEntry() を使用して、グループにユーザおよびグループを追加し、save() でサーバに保存します。

グループには、以下の予約グループを追加することもできます。

  • authenticated: 全認証済ユーザ
  • anonymous: 未認証ユーザを含む全ユーザ

ユーザは Nebula.User オブジェクトを、グループは Nebula.Group オブジェクトを指定する必要があります。

  • Nebula.User については、事前に検索を行っておく必要があります。
  • Nebula.Group については、事前に検索しておくか、new Nebula.Group() で作成したインスタンスを指定します。
    • new Nebula.Group() のインスタンスを渡す場合、サーバにそのグループが既に存在している必要があります。
    • 予約グループを指定する場合も、new Nebula.Group() で取得したインスタンスを渡します。
var user = ...; // 事前に検索された Nebula.User
var group0 = ...; // 事前に検索された Nebula.Group

group1.addEntry(user);
group1.addGroup(group0);
group1.addGroup(new Nebula.Group("authenticated"));

group1.save()
    .then(function(group) {
        // 成功時の処理
    }
    .catch(function(error) {
        // エラー時の処理
    };

ユーザ検索とグループ追加を連続して行う例を示します。

Nebula.User.query({"email": "taro.nichiden@example.com"})
    .then(function(users) {
        group1.addEntry(users[0]);
        return group1.save();
    }
    .then(function(group) {
        // 成功時の処理
    }
    .catch(...) {
        // 失敗時の処理
    };

7.2. アクセス制御

グループ単位でアクセス制御を行うことができます。 アクセス権を設定する場合は set() を使用し、 save() で保存します。

var acl = {
    "owner": "オーナID",
    "r": ["ユーザID", "g:グループ名"],
    "w": ["ユーザID"],
    "u": [],
    "d": [],
    "admin": []
};
group1.set("acl", acl);

ACL の詳細については「デベロッパーマニュアル」の「セキュリティ:ACL」の節をご覧ください。

7.3. グループの検索

グループを検索するには、 query() の引数に検索条件を指定して呼び出します。

検索条件 conditions のプロパティには、 _id (グループID), groupname (グループ名)のいずれかを指定します。 (conditions に null を指定した場合は全件検索になります)

レスポンスには、検索条件に一致したグループオブジェクトの配列が返ります。

var conditions = {
    "groupname"  : "グループ名"
}

Nebula.Group.query(conditions)
    .then(function(groups) {
        // 成功時の処理
        // groups: グループオブジェクトの配列
    })
    .catch(function(error) {
        // 失敗時の処理
    });

各グループについては、get() でプロパティを取得できます。 取得できるプロパティには以下のものがあります。

  • _id : グループID
  • groupname : グループ名
  • users : ユーザIDの配列
  • groups: グループ名の配列
  • acl: ACLの情報
  • createdAt: 作成日時
  • updatedAt: 更新日時
  • etag: ETagの値

7.4. グループの更新

ユーザを更新するには、グループを検索し、addEntry() / removeEntry() を 使用してエントリの変更を行い、save() で更新します。

7.5. グループの削除

グループを削除するには、Nebula.Group.remove() を使用します。 削除するグループは事前に検索しておく必要があります。

var group = ...; // グループを検索しておく

Nebula.Group.remove(group)
    .then(function() { /*成功時の処理*/ }
    .catch(function(error) { /*エラー時の処理*/ }