couchdb20091120_validation

10
07.Validation & Function 2009/11/20(Fri) z.ohnami

Upload: makoto-ohnami

Post on 22-Jun-2015

475 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: CouchDB20091120_validation

07.Validation & Function

2009/11/20(Fri)z.ohnami

Page 2: CouchDB20091120_validation
Page 3: CouchDB20091120_validation

Validationを使うことで制限できるもの

•ドキュメントの内容•ドキュメントの構造•認証

Page 4: CouchDB20091120_validation

Validationが発動するタイミング

•ドキュメントを保存したとき• Replicationを実行したとき

Page 5: CouchDB20091120_validation

Validationの設定の仕方

1.validate_doc_updateをデザインドキュメント内に定義する

2.validationのコードを書く

Page 6: CouchDB20091120_validation

ドキュメントの内容を確認するfunction(newDoc, oldDoc, userCtx) {    function unchanged(field) {    if (oldDoc && toJSON(oldDoc[field]) !=  \      toJSON(newDoc[field]))        throw({forbidden : "Field can't be changed: " + field});     }    unchanged("created_at");

}

Page 7: CouchDB20091120_validation

ドキュメントの構造を確認するfunction(newDoc, oldDoc, userCtx) {    function require(field, message) {    message = message || "Document must have a " + field;     if (!newDoc[field]) throw({forbidden : message});   };    if (newDoc.type == "post") {     require("title"); require("created_at");     require("body"); require("author");   }   if (newDoc.type == "comment") {     require("name");     require("created_at");     require("comment", "You may not leave an empty comment");   }}

Page 8: CouchDB20091120_validation

認証に利用するfunction(newDoc, oldDoc, userCtx) {  if (newDoc.author) {            enforce(newDoc.author == userCtx.name,         "You may only update documents with \         author " + userCtx.name);    }}

Page 9: CouchDB20091120_validation

気をつけてほしいこと

js> [] == [] false

Page 10: CouchDB20091120_validation

NoSQL

11/30(Mon) 18:30~http://shibuya.pm.org/blosxom/techtalks/200911.html