|
sfGuardPlugin
認証と権限の付与機能を追加する
PlugIns このドキュメントは下記の内容を翻訳したものです。
sfGuard pluginsfGuardPluginはsymfonyのプラグインでsymfonyの標準的な機能の上に認証と権限の付与機能を提供します。 これは設定変更可能なプラグインで、symfonyアプリケーションをすぐに安全にするモデル(user、groupとpermissionオブジェクト)とモジュール(backendとfrontend)を提供します。 インストレーション
symfony plugin-install http://plugins.symfony-project.com/sfGuardPlugin
symfony propel-build-model
symfony propel-build-sql
symfony propel-insert-sql もしくはdata/sql/plugins.sfGuardAuth.lib.model.schema.sqlで生成されたSQL命令文を使い新しいテーブルを作成することができます。
symfony propel-load-data
all:
.settings:
enabled_modules: [default, sfGuardGroup, sfGuardUser, sfGuardPermission]
symfony cc
security:
class: sfGuardBasicSecurityFilterアプリケーションをセキュアにするsymfonyアプリケーションをセキュアにするために:
all:
.settings:
enabled_modules: [..., sfGuardAuth]
login_module: sfGuardAuth
login_action: signin
secure_module: sfGuardAuth
secure_action: secure
class myUser extends sfGuardSecurityUser
{
}
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パラメータをカスタマイズできます。 注意(N.B.): @homepageルーティングルールがなければなりません(ユーザーがサインアウトするときに使われます) app.yml構成ファイルでsf_guard_plugin_routes_registerをfalseに定義せずsfGuardAuthモジュールを有効にしている場合これらのルートは自動的にプラグインによって登録されます:
all:
sf_guard_plugin:
routes_register: false
default:
is_secure: on
デフォルトのフィクスチャファイルをロードしている場合、ユーザー名とパスワードをどちらもadminとしてログインしてみて下さい。 ユーザー、パーミッションとグループを管理するユーザー、パーミッションとグループの管理をできるようにするために、sfGuardPluginにはbackendアプリケーションに統合できる3つのモジュールが備わっています。 これらのモジュールはsymfonyのadminジェネレータのおかげで自動生成されます。
all:
.settings:
enabled_modules: [..., sfGuardGroup, sfGuardPermission, sfGuardUser]
http://www.example.com/backend.php/sfGuardUser sfGuardAuthモジュールテンプレートをカスタマイズするデフォルトで、sfGuardAuthモジュールには2つのとてもシンプルなテンプレートが備わっています:
これらのテンプレートの一つをカスタマイズしたい場合:
sfGuardAuthモジュールアクションをカスタマイズするメソッドをカスタマイズするもしくはsfGuardAuthに追加したい場合:
(symfonyによってオートロードされないのでBasesfGuardAuthActionsをインクルードすることを忘れないで下さい) <?php
require_once(sfConfig::get('sf_plugins_dir').'/sfGuardPlugin/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は次のようなメソッドを追加します:
例えば、現在のユーザー名を取得するためには次のようなコードになります: $this->getUser()->getGuardUser()->getUsername()
// or via the proxy method
$this->getUser()->getUsername()Super administratorのフラグsfGuardPluginにはsuper administratorの概念があります。super administratorであるユーザーはすべてのクレデンシャルチェックを回避します。 super administratorフラグはウェブ上で設定できず、データベースで直接フラグを設定するかpakeタスクを使います: symfony promote-super-admin admin バリデータsfGuardPluginにはモジュールで使うことができる一つのバリデータ: sfGuardUserValidatorが備わっています。 このバリデータはユーザーとパスワードを検証して自動的にユーザーをサインインさせるsfGuardAuthモジュールによって使用されます。 sfAuthUserモデルをカスタマイズするsfAuthUserモデルはとてもシンプルです。emailもしくはfirst_nameもしくはbirthdayカラムは存在しません。 メソッドをクラスに追加できないので、sfAuthPlugin gives you the possibility to define a user profile class. デフォルトでsfAuthUserはsfGuardUserProfileクラスを探します。 下記のコードはschema.ymlに追加できるsfGuardProfileクラスの例です: sf_guard_user_profile:
_attributes: { phpName: sfGuardUserProfile }
id:
user_id: { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true, onDelete: cascade }
first_name: varchar(20)
last_name: varchar(20)
birthday: dateこれでuserオブジェクトを通してユーザープロファイルにアクセスできます: $this->getUser()->getGuardUser()->getProfile()->getFirstName()
// or via the proxy method
$this->getUser()->getProfile()->getFirstName()getProfile()メソッドは関連したユーザープロファイルオブジェクトを取得するもしくはまだ存在しない場合新しいものを作成します。 ユーザーを削除するとき、関連したプロファイルも削除されます。 app.ymlでユーザープロファイルクラスと外部キー名を変更できます: all:
sf_guard_plugin:
profile_class: sfGuardUserProfile
profile_field_name: user_id外部メソッドでユーザーパスワードを確認するLDAPサーバーが既にあるのでパスワードをデータベースに保存したくない場合、a .htaccessファイルもしくは別のテーブルにパスワードを保存する場合、app.ymlで独自のcheckPassword(スタティックメソッドもしくは関数)を呼び出すことができます: 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でこれを別のcallableに変更できます: all:
sf_guard_plugin:
algorithm_callable: [MyCryptoClass, MyCryptoMethod]もしくは all:
sf_guard_plugin:
algorithm_callable: md5アルゴリズムはそれぞれのユーザーに対して保存されるので、後で現在のユーザーに対してすべてのパスワードを再生成する必要無しに考えを変えることができます。 名前もしくは"Remember Me"クッキーの期限を変更するデフォルトで、"Remember Me"機能はsfRememberという15日間持続する名前のクッキーを作成します。app.ymlでこの振る舞いを変更できます: all:
sf_guard_plugin:
remember_key_expiration_age: 2592000 # 30日を秒単位で
remember_cookie_name: myAppRememberMesfGuardAuthリダイレクトハンドリングをカスタマイズするログインの成功の後にサユーザーをユーザーのプロファイルにリダイレクトさせたいもしくはサイトのログアウトを定義して下さい。 app.ymlでリダイレクトの値を定義できます: all:
sf_guard_plugin:
success_signin_url: @my_route?param=value # デフォルトでプラグインはリファラを使う
success_signout_url: module/action # デフォルトでプラグインはリファラを使うTODOとChangelogREADMEを参照して下さい。 |