mBaaSではAclを使ってアクセス権限を制御できます。たとえば、特定のユーザーにしか閲覧できないデータの作成も可能です。本記事では「Adminにしか閲覧できないデータ」を作成した場合の活用方法について紹介します。
例えば以下のようなデータ保存を行ったとします。
const Item = ncmb.DataStore('Item'); const item = new Item; // ACLの設定 const acl = new ncmb.Acl(); acl .setRoleReadAccess('Admin', true) .setRoleWriteAccess('Admin', true); item .set('name', 'Hello') .set('acl', acl) .save() .then(data => { })
そうすると、Adminロールにしか読み書きできないデータが作られます。作成時には権限のチェックは行われないので、ログインしていないユーザでも作成できます。
このデータの特徴としては、以下が挙げられます。
- データの保存は可能
- データの読み込みは不可
- データの更新は不可
- objectIdは保存時に確認可能
ロールに対して権限を付与する場合、ロール名さえ分かっていれば良いのが利点です。ユーザに権限を付与する場合、ユーザのobjectIdが必要ですが、ロールの場合はロール名でOKです。システムを構築する上でも、objectId固定よりも、ロール名で指定した方が開発しやすいはずです。
使い方
使い方としては、例えばこんな形が考えられます。
保存後、更新/閲覧しないデータの作成
IoTなどで見られるような、センサーデータをアップロードするだけという仕組みが作れます。データを閲覧する必要はないので、とにかくアップロードだけするものです。
本部のみ閲覧可能としたいデータの作成
本部と支部、管理者と運営など権限を分けて運用したいことがあります。そうした時にデータの保存はできても閲覧や更新が一切できないデータは役立ちます。この場合、何度もデータ投稿ができるようになりますので、本部側では最新のデータをチェックしたり、アップロードできないように制御する仕組みが必要でしょう。
アンケート
アンケートデータを蓄積する場合、多くは投稿のみになるでしょう。アンケートデータなどは、後で修正できる仕組みにはしないことが殆どです。アンケートでmBaaSを利用する場合、投稿者にも非公開データとして保存するのが良いでしょう。
注意点
注意点としては投稿者にも自分がすでに投稿したかどうかが分からないという問題があります。保存時に投稿したデータを残しておき、そのデータと比較してすでに投稿済みかどうかチェックするのが良いでしょう。
管理者に対しては表示、更新権限を付与しましょう。誰にも権限をつけない場合、デフォルトで全体で読み書きできるデータができてしまいます。
まとめ
mBaaSのロール管理を使いこなすと、クエリで細かく記述することなくデータが取り出せるようになります。また、データの流出リスクを下げられます。ユーザ単位で細かく設定すると運用が大変になる可能性があるので、ロールを使って保守が簡単な形にしてください。