アカウント管理

次に、アカウント管理を完成させます。
users_controller.php を開きます。

アカウント管理画面のtitleタグに各ページのタイトルを入れるので、各アクションの冒頭に、

        $this->set('title_for_layout', 'アカウント一覧');
というように、タイトルを設定します。上記は admin_index の場合の例。

次に一覧のビューを調整します。admin_index.ctp を開きます。
以下の paginator が全部出しでだるいので、

    <p>
    <?php
    echo $this->Paginator->counter(array(
    'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true)
    ));
    ?>    </p>

以下のようにすっきりさせます(笑)。

    <p>
    <?php
    echo $this->Paginator->counter(array(
    'format' => __('全 %count% 件', true)
    ));
    ?>    </p>

パスワードの表示はいらないので

            <th><?php echo $this->Paginator->sort('password');?></th>

と、

        <td><?php echo $user['User']['password']; ?> </td>

を削除します。
最初に登録した管理者を削除されてしまうとどうにもならないので

            <?php echo $this->Html->link(__('Delete', true), array('action' => 'delete', $user['User']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $user['User']['id'])); ?>

こうなっているところに、if ($user['User']['id'] != 1){} をつけておきます。

            <?php 
                if ($user['User']['id'] != 1) {
                    echo $this->Html->link(__('Delete', true), array('action' => 'delete', $user['User']['id']), null, sprintf(__('Are you sure you want to delete # %s?', true), $user['User']['id']));
                }
            ?>

気休めでしかないですけどね。操作ミスを防ぐだけの目的であれば十分でしょう。
アカウントの新規登録へ進みます。 admin_add.ctp を開いて、例によって

<?php echo $javascript->link(array('jquery','util'), false); ?>

を追加し、

        echo $this->Form->input('password');

こうなっているのを

        echo $this->Form->input('password', array('label' => 'パスワード', 'value'=>''));
        echo $this->Form->input('password_confirm', array('label' => 'パスワード(確認)', 'value'=>''));

こうします。
一方、モデルの user.php に、validate のルールを追加します。
例によって、この中に書いていきます。

    var $validate = array(
        'username' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                //'message' => 'Your custom message here',
                //'allowEmpty' => false,
                //'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
        ),
        'password' => array(
            'notempty' => array(
                'rule' => array('notempty'),
                //'message' => 'Your custom message here',
                //'allowEmpty' => false,
                //'required' => false,
                //'last' => false, // Stop validation after this rule
                //'on' => 'create', // Limit validation to 'create' or 'update' operations
            ),
        ),
    );

まずログインID(ユーザー名)は、

        'username' => array(
            "rule1" => array(
                "rule" => 'isUnique',
                "message" => "このユーザー名は既に登録されています",
            ),
            "rule2" => array(
                "rule" => array("custom", '/^[a-zA-Z0-9\_\-]{6,10}$/i'),
                "message" => "ユーザー名は6文字以上10文字以内で入力してください",
            ),
            'notempty' => array(
                'rule' => array('notempty'),
                'message' => 'ユーザー名を入力してください',
            ),
        ),

パスワードを入れたかどうか、一致してるか、は password_confirm の方でチェックします。

        'password_confirm' => array(
            'rule1' => array(
                'rule' => array('passwordConfirm'),
                'message'=>'パスワードの入力が一致しません',
            ),
            "rule2" => array(
                "rule" => 'notEmpty',
                "message" => "パスワードを入力してください",
            ),
        ),

上記の passwordConfirm はカスタムルールなので別途作ります。
password_confirm の方の入力を暗号化して、それと password の方が一致するかを確認します。
例の、Authコンポーネントが自動で暗号化してしまうことのためです。

    function passwordConfirm(){
        if ($this->data['User']['password'] == Security::hash(Configure::read('Security.salt') . $this->data['User']['password_confirm'])) {
            return true;
        } else {
            return false;
        }
    }

ブラウザで動作テストします。他で入力エラー出すとパスワードの入力が消えてしまいますが、ま、よしとします。
引き続き admin_edit.ctp もビューを修正します。
パスワードのフォーム

        echo $this->Form->input('password');

を以下に変えます

        echo $this->Form->input('password', array('label' => 'パスワード', 'value'=>''));
        echo $this->Form->input('password_confirm', array('label' => 'パスワード(確認)', 'value'=>''));

パスワードは編集の度に入れなくてはいけませんがこれもしょうがないでしょう。
ブラウザ動作テストします。
その他不要なメニューの削除やら、見出しやら、ビューの整形を行います。