AppzCoderさんがGithubで提供しているLaravelパッケージの1つに「Laravel Admin Panel」というものがあります。 GitHub – appzcoder/laravel-admin: Laravel Admin Panel一見、ロール(役割)付きの管理画面を提供しているのかと思ったら、同じくAppzCoderさんのLaravel 5以降に対応している「CRUD Generator」がArtisanコマンドでなく、GUIで操作できるようになっているではありませんか!
これは試してみるしかない!と思い、早速Cloud9に開発環境を構築。
Laravel Adminのインストール
READMEに書いてある通り、使い方はとても簡単です。
まずは、composerコマンドを使ってパッケージをダウンロードします。
1 |
composer require appzcoder/laravel-admin |
次に、artisanコマンドでadminパッケージをインストールします。
1 |
php artisan laravel-admin:install |
最後に、app/User.php
にHasRoles
を追加したら完了です。
1 2 3 4 |
class User extends Authenticatable { use Notifiable, HasRoles; ... |
最初にすること
このままでも機能しますが、せっかくロールとパーミッション(許可権限)設定機能があるので、ユーザーを作成しましょう。
まずロールを作成し、作成したロールに対してパーミッションを与え、ロールを持つユーザーを作成します。
作成したロールやパーミッションは以下のように利用することができます。
1 2 3 4 5 6 7 8 9 10 |
// Check role anywhere if(Auth::check() && Auth::user()->hasRole('admin')) { // Do admin stuff here } else { // Do nothing }// Check role in route middleware Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => ['auth', 'roles'], 'roles' => 'admin'], function () { Route::get('/', ['uses' => 'AdminController@index']); }); |
最後にチェック用のミドルウェアを反映させれば完了です。
1 2 3 4 5 6 |
// Add roles middleware in app/Http/Kernel.php protected $routeMiddleware = [ ... 'roles' => \App\Http\Middleware\CheckRole::class, ]; |
注)現在は問題ありませんが、「Add New」ボタンを押すと新規登録画面が表示できないエラーが発生していました。Laravel 5.5.0~5.5.9まではroutes/web.php
のRoute::resource('...');
でエラーが発生するようなので、composer update
で最新の状態にしておきましょう。
CRUD Generatorを使ってみよう!
CRUD Generator(クラッド ジェネレーター)のCRUDとは…
CRUD(クラッド)とは、ほとんど全てのコンピュータソフトウェアが持つ永続性の4つの基本機能のイニシャルを並べた用語。その4つとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)である。ユーザインタフェースが備えるべき機能(情報の参照/検索/更新)を指す用語としても使われる。
CRUD – Wikipedia
要は、アプリケーションに必要なCRUD機能付きのMVC(Model、View、Controller)とDBにテーブル自動で作成してくれるものです。では、左サイドバーのTools → Generatorをクリックしてみましょう。
入力項目に従って入力し、「Generate」ボタンを押すだけで完成です!CRUD Generatorで作成されるファイルは、
- /app/Http/Controllers/<Crud Name>Controller.php
- /app/<Crud Name>.php
- /database/migrations/<日時>_create_<Crud Name>_table.php
- /resources/views/<Crud Name>/create.blade.php
- /resources/views/<Crud Name>/edit.blade.php
- /resources/views/<Crud Name>/form.blade.php
- /resources/views/<Crud Name>/index.blade.php
- /resources/views/<Crud Name>/show.blade.php
- /resources/views/<Crud Name>/create.blade.php
-
/resources/laravel-admin/menus.json(JSON形式のModules=>itemsに追加)
1{"menus":[{"section":"User Manager","items":[{"title":"Users","url":"\/admin\/users"},{"title":"Roles","url":"\/admin\/roles"},{"title":"Permissions","url":"\/admin\/permissions"},{"title":"Give Role Permissions","url":"\/admin\/give-role-permissions"}]},{"section":"Tools","items":[{"title":"Generator","url":"\/admin\/generator"}]},{"section":"Modules","items":[<Crud Name>]}]} -
/routes/web.php(最後の行に)
1Route::resource('admin/<Crud Name>', 'Admin\\<Crud Name>Controller');
ちなみにmigrations
に作成されたファイルはphp artisan migrate
済みです。
ロール別にアクセスを制御
初期状態のままでは、ログインしてもしなくても誰でも/admin
以下にアクセスすることができます。
そこで、/routes/web.php
をカスタマイズしてアクセス制限を付け加えましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Route::group(['middleware' => 'auth'], function () { Route::get('admin', 'Admin\AdminController@index'); // Only System Manager Route::group(['middleware' => 'roles', 'roles' => 'system'], function () { Route::get('admin/give-role-permissions', 'Admin\AdminController@getGiveRolePermissions'); Route::post('admin/give-role-permissions', 'Admin\AdminController@postGiveRolePermissions'); Route::resource('admin/roles', 'Admin\RolesController'); Route::resource('admin/permissions', 'Admin\PermissionsController'); Route::resource('admin/users', 'Admin\UsersController'); Route::get('admin/generator', ['uses' => '\Appzcoder\LaravelAdmin\Controllers\ProcessController@getGenerator']); Route::post('admin/generator', ['uses' => '\Appzcoder\LaravelAdmin\Controllers\ProcessController@postGenerator']); }); // Administrator Route::group(['middleware' => 'roles', 'roles' => ['system', 'admin']], function () { // Add New Route Route::resource('admin/<Crud Name>', 'Admin\\<Crud Name>Controller'); }); }); |
もちろん、namespace
やprefix
を使った指定方法も可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => ['auth', 'roles'], 'roles' => 'system'], function () { Route::get('give-role-permissions', 'AdminController@getGiveRolePermissions'); Route::post('give-role-permissions', 'AdminController@postGiveRolePermissions'); Route::resource('roles', 'RolesController'); Route::resource('permissions', 'PermissionsController'); Route::resource('users', 'UsersController'); Route::get('generator', ['uses' => '\Appzcoder\LaravelAdmin\Controllers\ProcessController@getGenerator']); Route::post('generator', ['uses' => '\Appzcoder\LaravelAdmin\Controllers\ProcessController@postGenerator']); }); Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => ['auth', 'roles'], 'roles' => ['system', 'admin']], function () { Route::get('/', 'AdminController@index'); Route::resource('<Crud Name>', '\<Crud Name>Controller'); }); |
また、あまりroute
に書き過ぎると可読性が悪くなるので、Controller
にMiddleware
を追加してもいいでしょう。注)CRUD Generator使用時に出力されるルート設定は最後の行に追加されますので、ルートグループを作成したら手動で中に入れる必要があります。crudコマンドには他にバリデーションやリレーションのオプションも存在します。
次回は拡張する方法を紹介します。
コメント
コメント一覧 (2件)
[…] Laravel 5.5に対応したCRUD Generator付きの管理画面(Admin)を試してみる […]
[…] にnamespaceで一般会員サイトと管理画面を分けても良いかも。 Laravel 5.5に対応したCRUD Generator付きの管理画面(Admin)を試してみるhttps://minory.org/laravel-admin.htmlAppzCoderさんがGithubで提供している […]