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

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

mBaaSで作る業務システム「日報システム」(その2:データ登録)

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

mBaaSはスマートフォンアプリを作るのに最適です。そしてスマートフォンアプリは個人が楽しむゲームやチャットなどだけでなく、業務用途でも広がりを見せています。そこでmBaaSも業務システムを作るために使ってみましょう。

何回かに分けて、日報システムを作ってみます。他の業務システムへも応用はさほど難しくないでしょう。今回は前回のログインに続いて、データ登録を作成します。以下は抜粋になります。実際のコードはNCMBMania/dailyReport: mBaaSを使った日報システムです。を参考にしてください。

今回のゴール

今回はログイン後のデータ登録画面を作ります。一つの特徴として、テキストで記録するメモと、写真のアップロードが行えるようになっています。

写真のアップロード

指定された写真は次のようなコードでアップロードできます。ファイル名はユニークでないといけないので、ログインユーザのobjectIdとファイル名を付けることにします。

return new Promise((res, rej) => {
  if (!app.report.photo) {
    return res('');
  }
  const user = ncmb.User.getCurrentUser();
  const photoName = `${user.objectId}-${app.report.photo.name}`;
  ncmb.File
    .upload(photoName, app.report.photo)
    .then((f) => {
      const url = `https://mb.api.cloud.nifty.com/2013-09-01/applications/${applicationId}/publicFiles/${f.fileName}`;
      return res(url);
    })
    .catch((err) => {
      rej(err);
    })
});

この画像データはSDK経由でもアクセスできますが、管理画面の設定を変更することでHTTPS経由でも取得できるようになります。

f:id:mbaasdevrel:20171212095115p:plain

URLは次のようになります。アプリケーションID(applicationId)は常に固定で、これは管理画面のURLを見て確認できます。

`https://mb.api.cloud.nifty.com/2013-09-01/applications/${applicationId}/publicFiles/${fileName}`

f:id:mbaasdevrel:20171212095132p:plain

日報のアップロード

写真をアップロードしたらURLが分かりますので、それも日報の一要素として追加してアップロードします。

この時、注意点としては権限になります。要件としては以下になります。

  • 本人は読み書き可能
  • 管理者グループは読み書き可能
  • 所属している部署グループは読み込み可能(編集は不可)

これらをコードで表すと次のようになります。

const acl = new ncmb.Acl;
acl
  .setRoleReadAccess(app.roleName, true)
  .setRoleReadAccess('admin', true)
  .setRoleWriteAccess('admin', true)
  .setUserReadAccess(user, true)
  .setUserWriteAccess(user, true);

後は save メソッドを実行すれば保存されます。日報にユーザのobjectIdを残すのはプッシュ通知を送る対象を特定するためです。

report
  .set('date', new Date(m[1], parseInt(m[2]) - 1, m[3]))
  .set('note', app.report.note)
  .set('division', app.roleName)
  .set('reporterId', user.objectId)
  .set('reporter', user.mailAddress)
  .set('acl', acl)
  .set('url', url)
  .save();

最後に

注意点として権限管理があります。業務システムではデータのアクセス権限が問題になりがちなので、mBaaSの権限管理機能を使ってしっかりと作ってください。権限を正しく設定すれば、データの取得時には複雑な条件で絞り込んだり、更新権限をコードで管理したりする必要もありません。ぜひお試しください。

実際のコードはNCMBMania/dailyReport: mBaaSを使った日報システムです。にアップロードしてあります。実装時の参考にしてください。

中津川 篤司

中津川 篤司

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