今まであまり注意してみていなかったNCMBのパーミッション
「読込」って何だよ?(´・ω・`)
となってので、いろいろ試してみました。
ちなみに権限が無いと403エラーが返ってきます。
一応、公式ドキュメントはこちら
データストア(JavaScript):アクセス権限設定
読込
findById()に制限を与えます。
読込と検索の違いですが、「読込はObjectId指定でのレコードの読込」のことです。
エンドユーザーに特定のデータ以外を見せたくない場合は制限をかけましょう。
findByIdとか普段使わないから、存在すら知りませんでした。
以下、サンプル。
var read_test = (function(){
var Test = ncmb.DataStore("Test");
Test.fetchById("hogeHogeFugaFUga")
.then(function(res){
alert(JSON.stringify(res));
})
.catch(function(e){
alert(e);
});
});
これ以降は公式ドキュメントにも記載がある内容です。
検索
読込でも触れましたが、こちらはfetch()またはfetchAll()に制限を与えます。
エンドユーザーにデータを一切見せたくない場合は制限をかけましょう。
var find_test = (function(val){
var Test = ncmb.DataStore("Test");
Test
.fetchAll() // or fetch()
.then(function(results){
if (results.length == 0)return;
alert(JSON.stringify(results));
})
.catch(function(e){
alert(e);
});
});
更新
update()に制限を与えます。
私の認識では、既存の行Objectを取得しておく必要があるので、
利用の際は、少なくとも「読込」または「検索」のどちらかに権限が必要です。
エンドユーザーにデータを更新させたくない場合は制限をかけましょう。
var update_test = (function(val, new_val){
var Test = ncmb.DataStore("Test");
Test.equalTo("value", val)
.fetchAll()
.then(function(results){
if (results.length == 0)return;
var obj = results[0];
obj.set("value", new_val);
obj.update();
})
.catch(function(e){
alert(e);
});
});
作成
create()またはbatch()に制限を与えます。
エンドユーザーにデータを作成させたくない場合は制限をかけましょう。
var create_test = (function(val){
var Test = ncmb.DataStore("Test");
var test = new Test();
test.set("value", val).save().then(function(results) {
alert(JSON.stringify(results));
}).catch(function(err) {
alert(err);
});
});
削除
delete()に制限を与えます。
「更新」と同様に私の認識では、既存の行Objectを取得しておく必要があるので、
利用の際は、少なくとも「読込」または「検索」のどちらかに権限が必要です。
エンドユーザーにデータを削除させたくない場合は制限をかけましょう。
var delete_test = (function(val){
var Test = ncmb.DataStore("Test");
Test.equalTo("value", val)
.limit(1)
.fetchAll()
.then(function(results){
if (results.length == 0)return;
var obj = results[0];
obj.delete();
})
.catch(function(e){
alert(e);
});
});
フィールド追加
set()に制限を与えます。
フィールド追加のため、利用の際は、少なくとも「作成」または「更新」のどちらかに権限が必要です。
エンドユーザーにカラムを追加させたくない場合は制限をかけましょう。
var add_col_test = (function(val){
var Test = ncmb.DataStore("Test");
var test = new Test();
test
.set("value", val)
.set("add", "add") //←ここで増えてます。
.save().then(function(results) {
alert(JSON.stringify(results));
}).catch(function(err) {
alert(err);
});
});
まとめ
javascriptからNCMBを使うのはとても簡単です。
簡単なサービスなら無料ホスティングサービスと組み合わせることで、コストを掛けずサービスのリリースが可能です。
個人的には神バックエンドだと思ってます。
その反面、権限周りを正確に設定しておかないと悪意のあるユーザーに大切なデータを破壊される危険性があります。(可能性は低いですが…)
というのもChromeやsafariの開発者向けコンソールから任意のコードが実行できるからです。
権限をすべて与えていると、記述したjavascriptに関係なく、意図しないコードを実行されるリスクが出てきます。
そのため権限設計は丁寧に行いましょう。