ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

JavaScript SDKを拡張して権限をまとめて設定できるようにする

https://cdn-ak.f.st-hatena.com/images/fotolife/m/mbaasdevrel/20171212/20171212211252.png

JavaScript SDKを使うことでmBaaSの各種機能を簡単に扱えるようになりますが、その機能は基本的なものだけになります。そのため一つ一つの処理を手順通りに行うとコード量が増えがちです。

特に多くなるのが権限周りの処理です。例えば以下のような権限を設定しようとします。

  • user1に読み取り権限を付与
  • user2に読み取り、書き込み権限を付与
  • adminグループに読み取り、書き込み権限を付与
  • userグループに読み込み権限を付与
  • 全体に対して読み込み権限を付与

実際には全体に対して付与しているので幾つかの権限は不要ですが、サンプルとして考えてください。

このような権限付与を行う場合、コードでは次のように表現されます。

const acl = new ncmb.Acl();
acl
  .setUserReadAccess(user1, true)
  .setUserReadAccess(user2, true)
  .setUserWriteAccess(user2, true)
  .setRoleReadAccess('admin', true)
  .setRoleWriteAccess('admin', true)
  .setRoleReadAccess('user', true)
  .setPublicReadAccess(true)

改善

これはかなり長いコードで冗長的です。そこでmBaaSを拡張するライブラリ ncmb-extend の中に機能を追加してAclをまとめて設定できるようにしました。 ncmb.AclEx がそれで、一つ目の引数に読み取り、二つ目の引数に書き込み権限を指定しします。

同じ内容を定義する場合、次のようになります。

const acl = ncmb.AclEx(
  // 読み取りアクセス
  ['*', 'admin', 'user', user1, user2],
  // 書き込みアクセス
  ['admin', user2]
);
console.log(acl.toJSON());
/*
{ '*': { read: true },
  'role:admin': { read: true, write: true },
  'role:user': { read: true },
  aaa: { read: true },
  bbb: { read: true, write: true } }
*/

使い方

ncmb-extend はNode.jsのパッケージ管理システムであるnpmでインストールできます。

$ npm install ncmb-extend --save

後はこのライブラリを読み込むだけです

require('ncmb-extend');

読み込みが終われば普段通りの使い方で ncmb.AclEx が使えます。

最後に

JavaScript SDKをそのまま津アウトどうしてもコード量が増えがちです。自分たちのプロジェクトに合わせて拡張して使いやすくメンテナンスしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。