管理者や課金ユーザなどで、ロールを使っている方は多いかと思います。その際にはログインしているユーザがどのロールに所属しているかによってコンテンツの出し分けを行うでしょう。
現状のmBaaSではログインしているユーザがどのロールに所属しているか一覧で取得する方法がありません。例えばJavaScript SDKの場合、あるロールに所属しているユーザの一覧を取得することはできますが、その中から自分のユーザIDを探すのは面倒です。
そこでログインしているユーザが特定のロールに所属しているかどうかを判定するメソッドを作りましたので紹介します。これはJavaScript SDK向けになります。
Requestを直接呼び出す
特定のロールに所属している全ユーザを取得するメソッドはあるので、それを真似してRequestオブジェクトを直接呼び出すようにします。その際に自分のobjectIdを渡すことで、データの取得件数を1件に絞り込めます。
ncmb.User.isBelongTo = function(role) { me = ncmb.User.getCurrentUser(); return new Promise(function(res, rej) { ncmb.request({ path: "/"+ncmb.version+"/users", query: { where: JSON.stringify({ "objectId": me.objectId, "$relatedTo":{ "object":{ "__type":"Pointer", "className":"role", "objectId": role.objectId }, "key":"belongUser" } }) } }) .then(function(ary) { var json = JSON.parse(ary).results; res(json.length == 1); }) .catch(function(e) { rej(e); }); }) }
これにより、ロール内の全ユーザを取得してループで回すような面倒な処理は不要になります。
使い方
使い方は簡単です。特定のロールを指定して呼び出すようにします。今回は Administrator グループに所属しているかどうかを判断しています。結果によって、所属しているかどうを判断できます。ロールの検索部分が面倒であれば isBelongTo 内で実行しても良いでしょう。
if (ncmb.User.getCurrentUser()) { ncmb.Role.equalTo("roleName", "Administrator") .fetch() .then(function (role){ ncmb.User.isBelongTo(role) .then(function(result) { if (result) { console.log("所属しています") }else{ console.log("所属していません") } }, function(err) { console.log("エラー", err); }) }); }
コード量は決して少なくありませんが、 ncmb.User を拡張することで使い方はシンプルにできます。多くの場合、特定のロールに所属しているかどうか知りたいだけで、すべてのロールが必要な訳ではないでしょう。コードを参考に、皆さんのアプリ内でご利用ください。