24 Feb 2014

[CakePHP]AuthモジュールとACLまわりの衝突

どうやら、AuthモジュールとACLまわりのモジュールはAuthの設定が優先されるっぽい。

http://book.cakephp.org/2.0/ja/tutorials-and-examples/simple-acl-controlled-application/part-two.html

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('initDB'); //この行は終わったあと削除できます
}

public function initDB() {
    $group = $this->User->Group;
    //管理者グループには全てを許可する
    $group->id = 1;
    $this->Acl->allow($group, 'controllers');

    //マネージャグループにはpostsとwidgetsに対するアクセスを許可する
    $group->id = 2;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts');
    $this->Acl->allow($group, 'controllers/Widgets');

    //ユーザグループにはpostsとwidgetsに対する追加と編集を許可する
    $group->id = 3;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts/add');
    $this->Acl->allow($group, 'controllers/Posts/edit');
    $this->Acl->allow($group, 'controllers/Widgets/add');
    $this->Acl->allow($group, 'controllers/Widgets/edit');
    //馬鹿げた「ビューが見つからない」というエラーメッセージを表示させないためにexitを追加します
    echo "all done";
    exit;
}
 とならんでいると、Aclの設定は無視される、ようです。

22 Feb 2014

[CakePHP]hashing password パスワードのハッシュ化

CakePHP2系 ( $version < 2.3 ) のお話

すべからくパスワードはDB保存時にハッシュ化されるべきですが、
http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html
を参考にUserモデルのファイルに、

 // hashing password
public function beforeSave($options = array()) {
    $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
    return true;
}
と、ルーチンを追加して、保存時にハッシュ化されるように設定。
このままだと、passwordフィールドを含まない更新でエラーが発生するので、
下記のように書き換える。

// hashing password
public function beforeSave($options = array()) {
    if ( isset ( $this->data['User']['password'] ) ) {
        $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
    }
    return true;
}
こうすれば、パスワードに触れずに、その他のフィールドをeditする事が可能。

2.4以降では、ハッシュ化もモジュールを通じて行われるようです。上記問題も対応済です。

http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html

public function beforeSave($options = array()) {
    if (isset($this->data[$this->alias]['password'])) {
        $passwordHasher = new SimplePasswordHasher();
        $this->data[$this->alias]['password'] = $passwordHasher->hash($this->data[$this->alias]['password']);
    }
    return true;
}

18 Feb 2014

Blogger と Twitterの連携 (Blogger更新→Twitter投稿)

今回はFeedBurnerを使用しました。

フィードの設定画面から、Publicize - Socialize を選択。
'Add a Twitter account'ボタンを押すと、ブラウザでログインしているTwitterアカウントでの承認画面がでる。
Bloggerの方のセッティングで、Post Feed Redirect URLをFeedBurnerのフィードに設定。

これを設定しないと投稿されないのかな(あるいは設定が浸透するまで多少時間が掛かったか)。



Twitterの投稿時にいろいろフォーマットもいじれるみたいですが、ひとまず初期状態で使用します。