FuelPHPには、マスター管理対象となるモデルの管理画面を自動生成するOilコマンド、Admin Scaffolding
がデフォルトで含まれています。
会社のモデルの管理画面を作成したときの手順です。
コードと名前だけをもつ会社マスター用のモデルを作成して、マイグレーションを実行
$ oil g admin company code:string name:string
Creating controller: /path/to/project/fuel/app/classes/controller/base.php
Creating controller: /path/to/project/fuel/app/classes/controller/admin.php
Creating views: /path/to/project/fuel/app/views/admin/template.php
Creating views: /path/to/project/fuel/app/views/admin/dashboard.php
Creating views: /path/to/project/fuel/app/views/admin/login.php
Creating migration: /path/to/project/fuel/app/migrations/001_create_companies.php
Creating model: /path/to/project/fuel/app/classes/model/company.php
Creating controller: /path/to/project/fuel/app/classes/controller/admin/company.php
Creating view: /path/to/project/fuel/app/views/admin/company/index.php
Creating view: /path/to/project/fuel/app/views/admin/company/view.php
Creating view: /path/to/project/fuel/app/views/admin/company/create.php
Creating view: /path/to/project/fuel/app/views/admin/company/edit.php
Creating view: /path/to/project/fuel/app/views/admin/company/_form.php
$ oil r migrate
管理画面にアクセス可能かどうかは Auth パッケージの User の所属グループによって判断されます。
Authパッケージを有効にします。
// app/config/config.php
'always_load' => array(
// ...
'packages' => array(
'orm',
'auth',
),
// ...
'config' => array('auth'),
// ...
),
Authドライバーは Ormauth を指定しました。
$ cp fuel/packages/auth/config/auth.php fuel/app/config/
// fuel/app/config/auth.php
return array(
'driver' => 'Ormauth',
'verify_multiple_logins' => false,
'salt' => 'xxxxxxx',
'iterations' => 10000,
);
Authパッケージ用のテーブルをデータベースに追加します。
$ oil r migrate --packages=auth
Performed migrations for package:auth:
001_auth_create_usertables
002_auth_create_grouptables
003_auth_create_roletables
004_auth_create_permissiontables
005_auth_create_authdefaults
006_auth_add_authactions
007_auth_add_permissionsfilter
008_auth_create_providers
009_auth_create_oauth2tables
010_auth_fix_jointables
管理画面にアクセスするユーザは、”Super Admins”のAuth_Groupに所属している必要があります。
追加された Controller_Admin をみると before で管理者かどうかをチェックしているのがわかります。
// fuel/app/classes/controller/admin.php
class Controller_Admin extends Controller_Base
{
// ...
public function before()
{
parent::before();
if (Request::active()->controller !== 'Controller_Admin' or ! in_array(Request::active()->action, array('login', 'logout')))
{
if (Auth::check())
{
$admin_group_id = Config::get('auth.driver', 'Simpleauth') == 'Ormauth' ? 6 : 100;
if ( ! Auth::member($admin_group_id))
{
Session::set_flash('error', e('You don\'t have access to the admin panel'));
Response::redirect('/');
}
}
else
{
Response::redirect('admin/login');
}
}
}
Ormoauthの場合は、id=6 のグループが管理者グループとしてデータベースに登録されています。
ユーザーにグループを設定する画面はないので、データベースを直に修正して管理者を設定します。
とりあえず、Authパッケージのマイグレーションで追加される admin@example.org / admin ユーザーでログインすると、/admin 以下に管理画面が作成されています。
参考:
FuelPHP での「管理パネル」チュートリアル – A Day in Serenity @ kenjis
Build an Admin Panel with the Fuel PHP Framework – Tuts+ Code Tutorial