トップ  > symfony  > ユーザ権限・管理  > 記事

No.1981 sfDoctrineGuardPluginのREADME翻訳

sfDoctrineGuardPluginのREADME翻訳Add Star

翻訳を載せておきますが、微妙に内容が間違っている部分もあるっぽいです。今回はそういった部分は修正せずに単純に翻訳してあります。

翻訳ファイルはgithubに載せましたので、本家のライセンスにしたがってご自由に利用してください。

# sfGuardDoctrine plugin (for symfony 1.3) #

`sfDoctrineGuardPlugin` は、symfony の標準的なセキュリティ機能を使ってサイトの認
証と権限を管理できる symfony のプラグインです。

このプラグインにはカスタマイズ可能なモデル (ユーザーオブジェクト、グループオブジェ
クト、パーミッションオブジェクト)、モジュール (バックエンド、フロントエンド) があ
り、すぐに symfony アプリケーションをセキュアにできます。

## インストール ##

  * パッケージからプラグインをインストールします

        symfony plugin:install sfDoctrineGuardPlugin

  * または、Subversion からチェックアウトしてプラグインをインストールできます
  
        svn co http//svn.symfony-project.com/plugins/sfDoctrineGuardPlugin/trunk plugins/sfDoctrineGuardPlugin

  * 次に、`config/ProjectConfiguration.class.php` でプラグインを有効化します
  
        [php]
        class ProjectConfiguration extends sfProjectConfiguration
        {
          public function setup()
          {
            $this->enablePlugins(array(
              'sfDoctrinePlugin', 
              'sfDoctrineGuardPlugin',
              '...'
            ));
          }
        }

  * モデルを再構築します

        symfony doctrine:build-model
        symfony doctrine:build-sql

  * 次のコマンドでデータベースのテーブルを更新します (既存のデーブルを削除して、
    再作成します):

        symfony doctrine:insert-sql

    または、上記のすべてを次のコマンド 1 つで実行します

        symfony doctrine-build-all-reload frontend

    もしくは、`data/sql/plugins.sfGuardAuth.lib.model.schema.sql` に生成された
    SQL 文を使って新しいテーブルのみを作成できます。

  * デフォルトのフィクスチャーを読み込みます (この手順はオプションで、スーパー管
    理者ユーザーを作成します)

        mkdir data/fixtures/
        cp plugins/sfDoctrineGuardPlugin/data/fixtures/fixtures.yml.sample data/fixtures/sfGuard.yml

        symfony doctrine:data-load frontend # frontend は適切なアプリケーション名に置き換えてください

  * `settings.yml` で実際に使うモジュールを有効化します (オプション)
    * 管理用アプリケーション:  sfGuardUser、sfGuardGroup、sfGuardPermission を有
      効化できます

              all:
                .settings:
                  enabled_modules:      [default, sfGuardGroup, sfGuardUser, sfGuardPermission]

    * フロントエンドアプリケーション: sfGuardAuth を有効化できます

              all:
                .settings:
                  enabled_modules:      [default, sfGuardAuth]

  * キャッシュをクリアします

        symfony cc

  * オプションで、"Remember Me" フィルターを `filters.yml` のセキュリ
    ティフィルターの上に追加します:

        [yml]
        remember_me:
          class: sfGuardRememberMeFilter

        security: ~

### アプリケーションをセキュアにする ###

symfony アプリケーションをセキュアにするには:

  * `settings.yml` で `sfGuardAuth` モジュールを有効にします

        all:
          .settings:
            enabled_modules: [..., sfGuardAuth]

  * `settings.yml` で、デフォルトのログインモジュール、セキュアモジュールを変更
    します

        login_module:           sfGuardAuth
        login_action:           signin
        
        secure_module:          sfGuardAuth
        secure_action:          secure

  * `myUser.class.php` で親クラスを変更します

        class myUser extends sfGuardSecurityUser
        {
        }

  * `routing.yml` で次のようなルートを追加します (これはオプションです)

        sf_guard_signin:
          url:   /login
          param: { module: sfGuardAuth, action: signin }
        
        sf_guard_signout:
          url:   /logout
          param: { module: sfGuardAuth, action: signout }
        
        sf_guard_password:
          url:   /request_password
          param: { module: sfGuardAuth, action: password }

    各ルートの `url` パラメーターはカスタマイズできます。
    注意: `@homepage` という名前のルーティングは必須です。サインアウト時にこのル
          ートが使われます。

    これらのルートは、`sfGuardAuth` モジュールが有効になっている場合は、
    `routing.yml` に定義していなくても自動的に追加されます。
    ただし、`app.yml` 設定ファイルで次のように `sf_guard_plugin_routes_register`
    を false に設定すると、自動追加を無効にできます:

        all:
          sf_guard_plugin:
            routes_register: false

  * 個別のモジュール、またはアプリケーション全体の `security.yml` でセキュアにし
    ます

        default:
          is_secure: true

  * これで完了です。セキュアなページにアクセスしようとすると、ログインページへリ
    ダイレクトされます。
    デフォルトのフィクスチャーファイルをロードした場合は、ユーザー名 `admin`、パ
    スワード `admin` でログインしてみてください。

## ユーザー、パーミッション、グループの管理 ##

ユーザー、パーミッション、グループを管理できるように、`sfDoctrineGuardPlugin` で
はバックエンドアプリケーションに統合可能な 3 つのモジュールを用意しています。
これらのモジュールは symfony の Admin ジェネレーターで自動生成されたものです。

  * `settings.yml` でモジュールを有効化します

        all:
          .settings:
            enabled_modules: [..., sfGuardGroup, sfGuardPermission, sfGuardUser]

  * 次のようにデフォルトのルートでモジュールにアクセスできます:

    http://www.example.com/backend.php/sfGuardUser

## sfGuardAuth モジュールのテンプレートのカスタマイズ ##

デフォルトでは、`sfGuardAuth` モジュールはとてもシンプルな次の 2 つのテンプレー
トを使います:

  * `signinSuccess.php`
  * `secureSuccess.php`

これらのテンプレートをカスタマイズする場合は:

  * アプリケーション内に `sfGuardAuth` モジュールを作成します (`init-module` タ
    スクを使ってはいけません。直接 `sfGuardAuth` ディレクトリのみを作成してください)

  * `sfGuardAuth/templates` ディレクトリに、カスタマイズしたいテンプレートと同じ
    名前のテンプレートファイルを作成します

  * これで、デフォルトのテンプレートではなく、新しく作成したテンプレートファイル
    を使ってレンダリングされます

## `sfGuardAuth` モジュールのアクションのカスタマイズ ##

sfGuardAuth のメソッドをカスタマイズ、または追加したい場合は:

  * アプリケーションに `sfGuardAuth` モジュール用のディレクトリを作成します
    (ディレクトリのみを作成します)

  * モジュールの `actions` ディレクトリに `actions.class.php` ファイルを作成し、
    `BasesfGuardAuthActions` クラスを継承するようにします。
    (`BasesfGuardAuthActions` は symfony でオートロードされないので、インクルー
    ドしてください)

        <?php
    
        require_once(sfConfig::get('sf_plugins_dir').'/sfDoctrineGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.php');
    
        class sfGuardAuthActions extends BasesfGuardAuthActions
        {
          public function executeNewAction()
          {
            return $this->renderText('This is a new sfGuardAuth action.');
          }
        }

## `sfGuardSecurityUser` クラス ##

このクラスは symfony の `sfBasicSecurityUser` クラスを継承し、symfony アプリケー
ションで `user` オブジェクトとして使われます。(インストールの手順で `myUser` の
基底クラスを変更しました)

このオブジェクトにアクセスするには、アクションでは `$this->getUser()`、テンプ
レートでは `$sf_user` を使います。

`sfGuardSecurityUser` にはいくつかの追加のメソッドがあります:

  * `signIn()` および `signOut()` メソッド
  * `getGuardUser()` メソッドは、`sfGuardUser` オブジェクトを返します
  * `sfGuardUser` オブジェクトに直接アクセスする一連のプロキシメソッド

たとえば、現在のユーザー名を取得するには次のようにします:

    $this->getUser()->getGuardUser()->getUsername()

    // プロキシメソッドを使うと
    $this->getUser()->getUsername()

## スーパー管理者フラグ ##

`sfDoctrineGuardPlugin` にはスーパー管理者という概念があります。スーパー管理者に
設定されているユーザーの場合は、すべての権限チェックがバイパスされます。

スーパー管理者フラグはウェブからは設定できず、データベースで直接変更するか、次の
タスクを使います:

    symfony guard:promote admin

## バリデーター ##

`sfDoctrineGuardPlugin` に用意されているバリデーター `sfGuardUserValidator` は、
自分のモジュールで使うことができます。

このバリデーターは、`sfGuardAuth` におけるユーザー名とパスワードの検証、およびユ
ーザーの自動サインインに使われています。

## 外部メソッドでユーザーのパスワードをチェックする ##

LDAP サーバーや .htaccess ファイルを使っているためデータベースにパスワードを保存
したくない場合や、別のテーブルにパスワードを保存したい場合、独自の呼び出し可能な
`checkPassword` (static メソッド、または関数) を用意して `app.yml` に設定します:

    all:
      sf_guard_plugin:
        check_password_callable: [MyLDAPClass, checkPassword]

symfony が `$this->getUser()->checkPassword()` メソッドを呼び出す時に、設
定したメソッドまたは関数を呼び出します。関数は 2 つの引数をとります。1 つ目はユ
ーザー名で、2 つ目はパスワードです。関数からは true または false を返すようにし
ます。関数のテンプレートは次のようになります:

    function checkLDAPPassword($username, $password)
    {
      $user = LDAP::getUser($username);
      if ($user->checkPassword($password))
      {
        return true;
      }
      else
      {
        return false;
      }
    }

## パスワード保存用のアルゴリズムを変更する ##

デフォルトでは、パスワードは `sha1()` ハッシュで保存されます。呼び出し可能なメソ
ッドまたは関数を `app.yml` することで、任意のアルゴリズムに変更できます:

    all:
      sf_guard_plugin:
        algorithm_callable: [MyCryptoClass, MyCryptoMethod]

または:

    all:
      sf_guard_plugin:
        algorithm_callable: md5

アルゴリズムはユーザーごとに保存されるため、後からアルゴリズムを変更する場合に既
存のユーザーのパスワードを再生成する必要はありません。

## "Remember Me" Cookie の名前や有効期限を変更する ##

デフォルトでは、"Remember Me" 機能により `sfRemember` という名前の
Cookie が 15 日間保存されます。これは `app.yml` で変更できます:

    all:
      sf_guard_plugin:
         remember_key_expiration_age:  2592000   # 秒単位で 30 日
         remember_cookie_name:         myAppRememberMe

## `sfGuardAuth` のリダイレクト処理をカスタマイズする ##

ユーザーがログインに成功した後、ユーザーのプロフィールページへリダイレクトしたり、
ログアウトサイトを定義できます。

`app.yml` でリダイレクトの設定を変更します:

    all:
      sf_guard_plugin:
        success_signin_url:      @my_route?param=value # デフォルトではリファラーが使われます
        success_signout_url:     module/action         # デフォルトではリファラーが使われます

引用元

更新:2010/01/10 13:50 カテゴリ: symfony  > ユーザ権限・管理 ▲トップ

FuelPHP

Mac

フロントエンド開発

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

Python

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0