今回は誰でも編集できないようにパスワードをかけます。本当はデータベースを作成するときにパスワードのカラムも作っておくべきだったのですが、あとになってカラムを追加したくなったとき用のコードを書いてみることにします。

⇒ 動作確認はこちらから
ただし削除されては困るのでパスワードをかけています。そのため削除と編集の操作はできません

パスワードの取得と保存に関する関数

index.php

パスワードをテーブルに保存したり読み出すために必要な関数を先に示します。

これはパスワードを保存するためのテーブルです。PageIDがページのidになっています。ここに設定されたパスワードを暗号化して保存します。

CheckSetPassword関数はページIDからそのページにパスワードが設定されているかどうかを調べるためのものです。

ShowPassWordPage関数はパスワードを入力するフォームを表示するためのものです。

ShowSetPassWordPage関数はパスワードを設定するためのフォームを表示させるためのものです。

GetHashedPassFromId関数はページIDから設定されているパスワードのハッシュを取得します。パスワードが設定されていない場合は空文字列を返します。

main関数の変更

main関数を少し変更します。

edit-XXにアクセスしたときはOnAccessEditPage関数、change-XXにアクセスしたときは OnAccessChangePasswordPage関数、update-XXにアクセスしたときは OnAccessUpdatePage関数、delete-XXにアクセスしたときは OnAccessDeletePage関数が呼び出されることにします。それからPostFromNewPage関数も変更します。

新しくチャートを作成する処理

新しくチャートを作成するときにパスワードも設定できるようにします。

template/new.html

/post-from-newにポストされたら同じパスワードが入力されているか確認してからパスワードをSQLiteのDBに保存します。

編集用のページを表示する処理

/edit-XXにアクセスされたらパスワードが設定されていない場合はそのままタスク編集用のページを表示し、設定されている場合はパスワードを入力するフォームを表示します。

パスワードを入力してボタンをおすとDBに登録されているパスワードと照合され、合っていればタスク編集用のページが表示されます。

パスワードを変更する処理

パスワードの再設定のページで新しくパスワードを設定した場合は新しく入力されたふたつのパスワードが等しいか、古いパスワードがある場合は元のパスワードに入力したものと同じかどうかが調べられ、合っていれば再設定がおこなわれます。このときセッション情報が一時的に保存されます。次にedit-XXにリダイレクトされるのですが、まだパスワードを入力しなければならないのを回避するためです。

index.php

チャートを更新する処理

更新と削除の処理ですが、パスワードを入力することを義務づけます。

既存のToReflect関数とDeleteChart関数を削除し、以下のコードをjs/task2.jsかtemplate/edit.htmlのスクリプト部分の下のほうに書きます。

更新処理をするときはパスワードが合っているかチェックしたあと、ページidとPostされたjsonTEXTをUpdatePage関数に渡します。

index.php

UpdatePage関数ではJSON文字列をobjectに変換し、$contents[“Tasks”]や$contents[“PageName”]が存在するか確認します。確認できたらいったんタスクに関する情報が保存されているテーブルは削除して作り直します。そのあとSQLiteのDBに保存します。

更新処理がおこなわれるときに実際にDBにデータを保存する処理を示します。

チャートを削除する処理

削除するときの処理を示します。Postされたパスワードが正しいかどうかチェックして、合っているのであればDeletePage関数を呼び出してDBからデータを削除します。