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経由でも取得できるようになります。
URLは次のようになります。アプリケーションID(applicationId)は常に固定で、これは管理画面のURLを見て確認できます。
`https://mb.api.cloud.nifty.com/2013-09-01/applications/${applicationId}/publicFiles/${fileName}`
日報のアップロード
写真をアップロードしたら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を使った日報システムです。にアップロードしてあります。実装時の参考にしてください。