CouchDB20091120_validation

580 views
532 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
580
On SlideShare
0
From Embeds
0
Number of Embeds
32
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CouchDB20091120_validation

  1. 1. 07.Validation & Function 2009/11/20(Fri) z.ohnami
  2. 3. Validation を使うことで制限できるもの <ul><ul><li>ドキュメントの内容 </li></ul></ul><ul><ul><li>ドキュメントの構造 </li></ul></ul><ul><ul><li>認証 </li></ul></ul>
  3. 4. Validation が発動するタイミング <ul><ul><li>ドキュメントを保存したとき </li></ul></ul><ul><ul><li>Replication を実行したとき </li></ul></ul>
  4. 5. Validation の設定の仕方 <ul><ul><li>validate_doc_update をデザインドキュメント内に定義する </li></ul></ul><ul><ul><li>validation のコードを書く </li></ul></ul>
  5. 6. ドキュメントの内容を確認する <ul><li>function(newDoc, oldDoc, userCtx) { </li></ul><ul><li>  </li></ul><ul><li>   function unchanged(field) { </li></ul><ul><li>    if (oldDoc && toJSON(oldDoc[field]) !=   </li></ul><ul><li>     toJSON(newDoc[field]))  </li></ul><ul><li>       throw({forbidden : &quot;Field can't be changed: &quot; + field}); </li></ul><ul><li>     } </li></ul><ul><li>  </li></ul><ul><li>   unchanged(&quot;created_at&quot;); </li></ul><ul><li>} </li></ul>
  6. 7. ドキュメントの構造を確認する <ul><li>function(newDoc, oldDoc, userCtx) { </li></ul><ul><li>  </li></ul><ul><li>   function require(field, message) { </li></ul><ul><li>     message = message || &quot;Document must have a &quot; + field; </li></ul><ul><li>     if (!newDoc[field]) throw({forbidden : message}); </li></ul><ul><li>   }; </li></ul><ul><li>  </li></ul><ul><li>   if (newDoc.type == &quot;post&quot;) { </li></ul><ul><li>     require(&quot;title&quot;); require(&quot;created_at&quot;); </li></ul><ul><li>     require(&quot;body&quot;); require(&quot;author&quot;); </li></ul><ul><li>   } </li></ul><ul><li>   if (newDoc.type == &quot;comment&quot;) { </li></ul><ul><li>     require(&quot;name&quot;); </li></ul><ul><li>     require(&quot;created_at&quot;); </li></ul><ul><li>     require(&quot;comment&quot;, &quot;You may not leave an empty comment&quot;); </li></ul><ul><li>   } </li></ul><ul><li>} </li></ul>
  7. 8. 認証に利用する <ul><li>function(newDoc, oldDoc, userCtx) { </li></ul><ul><li>  if (newDoc.author) {     </li></ul><ul><li>       enforce(newDoc.author == userCtx.name,         &quot;You may only update documents with </li></ul><ul><li>        author &quot; + userCtx.name); </li></ul><ul><li>    } </li></ul><ul><li>} </li></ul>
  8. 9. 気をつけてほしいこと <ul><li>js> [] == []  </li></ul><ul><li>false </li></ul>
  9. 10. NoSQL 11/30(Mon) 18:30 ~ http://shibuya.pm.org/blosxom/techtalks/200911.html

×