Laravel 5为我们提供了认证,它很容易获得用户注册,登录,注销和重置密码,开发速度快并且容易上手,考虑到了大部分开发人员的需求。
但是当你开发ERP或者一些需要控制用户访问内容的系统时,你需要一些角色权限管理来控制不同用户的访问,不然就会造成很多不必要的麻烦。
角色和权限通过您可以创建几种类型的用户具有不同的角色和权限,我的意思是一些用户只具备看到列表的项目模块的权限,不具备编辑项目模块的权限。
如果你想开发一个基于角色权限控制的系统的话,那么你可以根据我的以下教程操作,我将带你通过简单的几个步骤,通过 entrust 包实现角色权限管理,并且对于Laravel哪怕不是特别熟悉,都不用害怕。
在下面的例子里,我将创建以下模块:
- 用户管理模块
- 角色管理模块
- 针对用户角色的增删改查模块
具体的业务逻辑如下:
当你注册用户之后,你不具备任何角色,那么你可以通过编辑用户,添加自己的角色和权限,然后你就可以操作对应角色的对应操作,实现访问控制。
在按照如下教程实现后,你看到的将是如下的界面,你也可以访问这个地址,先体验一把:
废话不扯,教程开始:
第一步:安装Laravel:
composer create-project --prefer-dist laravel/laravel blog
本教程需要你安装 laravelcollective/html 插件,一个表单插件,安装过程如下:
在 composer.json里添加:
"require": { "laravel/framework": "5.0.*", "laravelcollective/html": "~5.0" },
执行命令:
composer update
打开config/app.php添加providers:
'Collective\Html\HtmlServiceProvider',
添加别名:
'FORM' => 'Collective\Html\FormFacade', 'HTML' => 'Collective\Html\HtmlFacade',
然后就可以使用这个表单插件了。
第二步:安装entrust包:
composer require zizaco/entrust:5.2.x-dev
当然你也可以在composer.json里添加,通过composer update命令进行安装。
安装entrust包之后,打开config/app.php,添加provider 和 aliase:
'providers' => [ .... 'Zizaco\Entrust\EntrustServiceProvider::class', ], 'aliases' => [ .... 'Entrust' => Zizaco\Entrust\EntrustFacade::class, ],
你也可以自己修改entrust的配置,如果你想修改的话,执行下面的命令,就可以在config目录找到entrust.php文件,当然,我们大多数很少修改。
php artisan vendor:publish
第三步:创建表
这个步骤,我们将创建如下的表:
- users
- items
- roles
- role_user
- permission_role
当你第一次安装完Laravel项目的话,可能没有items表,那么可以自己手工创建下。或者直接用下面的命令:
php artisan make:migration create_items_table php artisan entrust:migration
User表:
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('users'); } }
Item表:
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateItemsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('items', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->text('description'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop("items"); } }
Entrust表:
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; class EntrustSetupTables extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('roles', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('display_name')->nullable(); $table->string('description')->nullable(); $table->timestamps(); }); Schema::create('role_user', function (Blueprint $table) { $table->integer('user_id')->unsigned(); $table->integer('role_id')->unsigned(); $table->foreign('user_id')->references('id')->on('users') ->onUpdate('cascade')->onDelete('cascade'); $table->foreign('role_id')->references('id')->on('roles') ->onUpdate('cascade')->onDelete('cascade'); $table->primary(['user_id', 'role_id']); }); Schema::create('permissions', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('display_name')->nullable(); $table->string('description')->nullable(); $table->timestamps(); }); Schema::create('permission_role', function (Blueprint $table) { $table->integer('permission_id')->unsigned(); $table->integer('role_id')->unsigned(); $table->foreign('permission_id')->references('id')->on('permissions') ->onUpdate('cascade')->onDelete('cascade'); $table->foreign('role_id')->references('id')->on('roles') ->onUpdate('cascade')->onDelete('cascade'); $table->primary(['permission_id', 'role_id']); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('permission_role'); Schema::drop('permissions'); Schema::drop('role_user'); Schema::drop('roles'); } }
第四步:创建Model:
在这个步骤,创建对象:User, Item, Role, Permission,我们来查看各个对象:
app/User.php:
namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Zizaco\Entrust\Traits\EntrustUserTrait; class User extends Authenticatable { use EntrustUserTrait; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; }
app/Item.php:
namespace App; use Illuminate\Database\Eloquent\Model; class Item extends Model { public $fillable = ['title','description']; }
app/Role.php:
use Zizaco\Entrust\EntrustRole; class Role extends EntrustRole { }
app/Permission.php:
use Zizaco\Entrust\EntrustPermission; class Permission extends EntrustPermission { }
第五步:添加中间件:
entrust提供了自己内置的中间件,我们只需要简单配置下:
app/Http/Kernel.php:
.... protected $routeMiddleware = [ .... 'role' => \Zizaco\Entrust\Middleware\EntrustRole::class, 'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class, 'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class, ] ....
第六步:创建模拟数据:
在这一步中,我们将创建权限的示例数据,现在我们有固定的权限,所以我们使用Laravel的db seeder 操作,如下所列创建,你还可以根据自己的需求添加额外的权限:
- role-list
- role-create
- role-edit
- role-delete
- item-list
- item-create
- item-edit
- item-delete
创建seeder通过下面的命令:
php artisan make:seeder PermissionTableSeeder
然后在PermissionTableSeeder添加如下代码:
database/seeds/PermissionTableSeeder.php
use Illuminate\Database\Seeder; use App\Permission; class PermissionTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $permission = [ [ 'name' => 'role-list', 'display_name' => 'Display Role Listing', 'description' => 'See only Listing Of Role' ], [ 'name' => 'role-create', 'display_name' => 'Create Role', 'description' => 'Create New Role' ], [ 'name' => 'role-edit', 'display_name' => 'Edit Role', 'description' => 'Edit Role' ], [ 'name' => 'role-delete', 'display_name' => 'Delete Role', 'description' => 'Delete Role' ], [ 'name' => 'item-list', 'display_name' => 'Display Item Listing', 'description' => 'See only Listing Of Item' ], [ 'name' => 'item-create', 'display_name' => 'Create Item', 'description' => 'Create New Item' ], [ 'name' => 'item-edit', 'display_name' => 'Edit Item', 'description' => 'Edit Item' ], [ 'name' => 'item-delete', 'display_name' => 'Delete Item', 'description' => 'Delete Item' ] ]; foreach ($permission as $key => $value) { Permission::create($value); } } }
添加完代码后,执行如下命令:
php artisan db:seed --class=PermissionTableSeeder
第七步:创建权限:
在这一步中,我们需要创建Laravel 5.2的身份验证,所以laravel提供工匠命令来创建身份验证,我们不需要为登录和注册创建路由和控制器。所以运行命令:
php artisan make:auth
第八步:添加路由:
app/Http/routes.php
Route::get('/', function () { return view('welcome'); }); Route::auth(); Route::group(['middleware' => ['auth']], function() { Route::get('/home', 'HomeController@index'); Route::resource('users','UserController'); Route::get('roles',['as'=>'roles.index','uses'=>'RoleController@index','middleware' => ['permission:role-list|role-create|role-edit|role-delete']]); Route::get('roles/create',['as'=>'roles.create','uses'=>'RoleController@create','middleware' => ['permission:role-create']]); Route::post('roles/create',['as'=>'roles.store','uses'=>'RoleController@store','middleware' => ['permission:role-create']]); Route::get('roles/{id}',['as'=>'roles.show','uses'=>'RoleController@show']); Route::get('roles/{id}/edit',['as'=>'roles.edit','uses'=>'RoleController@edit','middleware' => ['permission:role-edit']]); Route::patch('roles/{id}',['as'=>'roles.update','uses'=>'RoleController@update','middleware' => ['permission:role-edit']]); Route::delete('roles/{id}',['as'=>'roles.destroy','uses'=>'RoleController@destroy','middleware' => ['permission:role-delete']]); Route::get('itemCRUD2',['as'=>'itemCRUD2.index','uses'=>'ItemCRUD2Controller@index','middleware' => ['permission:item-list|item-create|item-edit|item-delete']]); Route::get('itemCRUD2/create',['as'=>'itemCRUD2.create','uses'=>'ItemCRUD2Controller@create','middleware' => ['permission:item-create']]); Route::post('itemCRUD2/create',['as'=>'itemCRUD2.store','uses'=>'ItemCRUD2Controller@store','middleware' => ['permission:item-create']]); Route::get('itemCRUD2/{id}',['as'=>'itemCRUD2.show','uses'=>'ItemCRUD2Controller@show']); Route::get('itemCRUD2/{id}/edit',['as'=>'itemCRUD2.edit','uses'=>'ItemCRUD2Controller@edit','middleware' => ['permission:item-edit']]); Route::patch('itemCRUD2/{id}',['as'=>'itemCRUD2.update','uses'=>'ItemCRUD2Controller@update','middleware' => ['permission:item-edit']]); Route::delete('itemCRUD2/{id}',['as'=>'itemCRUD2.destroy','uses'=>'ItemCRUD2Controller@destroy','middleware' => ['permission:item-delete']]); });
第九步:添加Controller:
app/Http/Controllers/UserController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\User; use App\Role; use DB; use Hash; class UserController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $data = User::orderBy('id','DESC')->paginate(5); return view('users.index',compact('data')) ->with('i', ($request->input('page', 1) - 1) * 5); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $roles = Role::lists('display_name','id'); return view('users.create',compact('roles')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $this->validate($request, [ 'name' => 'required', 'email' => 'required|email|unique:users,email', 'password' => 'required|same:confirm-password', 'roles' => 'required' ]); $input = $request->all(); $input['password'] = Hash::make($input['password']); $user = User::create($input); foreach ($request->input('roles') as $key => $value) { $user->attachRole($value); } return redirect()->route('users.index') ->with('success','User created successfully'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $user = User::find($id); return view('users.show',compact('user')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $user = User::find($id); $roles = Role::lists('display_name','id'); $userRole = $user->roles->lists('id','id')->toArray(); return view('users.edit',compact('user','roles','userRole')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $this->validate($request, [ 'name' => 'required', 'email' => 'required|email|unique:users,email,'.$id, 'password' => 'same:confirm-password', 'roles' => 'required' ]); $input = $request->all(); if(!empty($input['password'])){ $input['password'] = Hash::make($input['password']); }else{ $input = array_except($input,array('password')); } $user = User::find($id); $user->update($input); DB::table('role_user')->where('user_id',$id)->delete(); foreach ($request->input('roles') as $key => $value) { $user->attachRole($value); } return redirect()->route('users.index') ->with('success','User updated successfully'); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { User::find($id)->delete(); return redirect()->route('users.index') ->with('success','User deleted successfully'); } }
app/Http/Controllers/ItemCRUD2Controller.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Item; class ItemCRUD2Controller extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $items = Item::orderBy('id','DESC')->paginate(5); return view('ItemCRUD2.index',compact('items')) ->with('i', ($request->input('page', 1) - 1) * 5); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('ItemCRUD2.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $this->validate($request, [ 'title' => 'required', 'description' => 'required', ]); Item::create($request->all()); return redirect()->route('itemCRUD2.index') ->with('success','Item created successfully'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $item = Item::find($id); return view('ItemCRUD2.show',compact('item')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $item = Item::find($id); return view('ItemCRUD2.edit',compact('item')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $this->validate($request, [ 'title' => 'required', 'description' => 'required', ]); Item::find($id)->update($request->all()); return redirect()->route('itemCRUD2.index') ->with('success','Item updated successfully'); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { Item::find($id)->delete(); return redirect()->route('itemCRUD2.index') ->with('success','Item deleted successfully'); } }
app/Http/Controllers/RoleController.php
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Role; use App\Permission; use DB; class RoleController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(Request $request) { $roles = Role::orderBy('id','DESC')->paginate(5); return view('roles.index',compact('roles')) ->with('i', ($request->input('page', 1) - 1) * 5); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $permission = Permission::get(); return view('roles.create',compact('permission')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $this->validate($request, [ 'name' => 'required|unique:roles,name', 'display_name' => 'required', 'description' => 'required', 'permission' => 'required', ]); $role = new Role(); $role->name = $request->input('name'); $role->display_name = $request->input('display_name'); $role->description = $request->input('description'); $role->save(); foreach ($request->input('permission') as $key => $value) { $role->attachPermission($value); } return redirect()->route('roles.index') ->with('success','Role created successfully'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $role = Role::find($id); $rolePermissions = Permission::join("permission_role","permission_role.permission_id","=","permissions.id") ->where("permission_role.role_id",$id) ->get(); return view('roles.show',compact('role','rolePermissions')); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $role = Role::find($id); $permission = Permission::get(); $rolePermissions = DB::table("permission_role")->where("permission_role.role_id",$id) ->lists('permission_role.permission_id','permission_role.permission_id'); return view('roles.edit',compact('role','permission','rolePermissions')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $this->validate($request, [ 'display_name' => 'required', 'description' => 'required', 'permission' => 'required', ]); $role = Role::find($id); $role->display_name = $request->input('display_name'); $role->description = $request->input('description'); $role->save(); DB::table("permission_role")->where("permission_role.role_id",$id) ->delete(); foreach ($request->input('permission') as $key => $value) { $role->attachPermission($value); } return redirect()->route('roles.index') ->with('success','Role updated successfully'); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { DB::table("roles")->where('id',$id)->delete(); return redirect()->route('roles.index') ->with('success','Role deleted successfully'); } }
第十步:添加视图:
resources/views/layouts/app.blade.php
<html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Laravel</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:100,300,400,700"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" crossorigin="anonymous"> </head> <body id="app-layout"> <nav class="navbar navbar-default navbar-static-top"> <div class="container"> <div class="navbar-header"> <!-- Collapsed Hamburger --> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse"> <span class="sr-only">Toggle Navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <!-- Branding Image --> <a class="navbar-brand" href="{{ url('/') }}"> Laravel </a> </div> <div class="collapse navbar-collapse" id="app-navbar-collapse"> <!-- Left Side Of Navbar --> <ul class="nav navbar-nav"> <li><a href="{{ url('/home') }}">Home</a></li> <li><a href="{{ route('users.index') }}">Users</a></li> <li><a href="{{ route('roles.index') }}">Roles</a></li> <li><a href="{{ route('itemCRUD2.index') }}">Items</a></li> </ul> <!-- Right Side Of Navbar --> <ul class="nav navbar-nav navbar-right"> <!-- Authentication Links --> @if (Auth::guest()) <li><a href="{{ url('/login') }}">Login</a></li> <li><a href="{{ url('/register') }}">Register</a></li> @else <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> {{ Auth::user()->name }} <span class="caret"></span> </a> <ul class="dropdown-menu" role="menu"> <li><a href="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li> </ul> </li> @endif </ul> </div> </div> </nav> <div class="container"> @yield('content') </div> <!-- JavaScripts --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js" integrity="sha384-I6F5OKECLVtK/BL+8iSLDEHowSAfUo76ZL9+kGAgTRdiByINKJaqTPH/QVNS1VDb" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script> </body> </html>
resources/views/errors/403.blade.php
@extends('layouts.app') @section('content') <h1>You don't have permission.</h1> @endsection
resources/views/users/index.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Users Management</h2> </div> <div class="pull-right"> <a class="btn btn-success" href="{{ route('users.create') }}"> Create New User</a> </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>No</th> <th>Name</th> <th>Email</th> <th>Roles</th> <th width="280px">Action</th> </tr> @foreach ($data as $key => $user) <tr> <td>{{ ++$i }}</td> <td>{{ $user->name }}</td> <td>{{ $user->email }}</td> <td> @if(!empty($user->roles)) @foreach($user->roles as $v) <label class="label label-success">{{ $v->display_name }}</label> @endforeach @endif </td> <td> <a class="btn btn-info" href="{{ route('users.show',$user->id) }}">Show</a> <a class="btn btn-primary" href="{{ route('users.edit',$user->id) }}">Edit</a> {!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!} {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} {!! Form::close() !!} </td> </tr> @endforeach </table> {!! $data->render() !!} @endsection
resources/views/users/create.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Create New User</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::open(array('route' => 'users.store','method'=>'POST')) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Email:</strong> {!! Form::text('email', null, array('placeholder' => 'Email','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Password:</strong> {!! Form::password('password', array('placeholder' => 'Password','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Confirm Password:</strong> {!! Form::password('confirm-password', array('placeholder' => 'Confirm Password','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Role:</strong> {!! Form::select('roles[]', $roles,[], array('class' => 'form-control','multiple')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/users/edit.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Edit New User</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::model($user, ['method' => 'PATCH','route' => ['users.update', $user->id]]) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Email:</strong> {!! Form::text('email', null, array('placeholder' => 'Email','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Password:</strong> {!! Form::password('password', array('placeholder' => 'Password','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Confirm Password:</strong> {!! Form::password('confirm-password', array('placeholder' => 'Confirm Password','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Role:</strong> {!! Form::select('roles[]', $roles,$userRole, array('class' => 'form-control','multiple')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/users/show.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2> Show User</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {{ $user->name }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Email:</strong> {{ $user->email }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Roles:</strong> @if(!empty($user->roles)) @foreach($user->roles as $v) <label class="label label-success">{{ $v->display_name }}</label> @endforeach @endif </div> </div> </div> @endsection
resources/views/ItemCRUD2/index.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Items CRUD</h2> </div> <div class="pull-right"> @permission('item-create') <a class="btn btn-success" href="{{ route('itemCRUD2.create') }}"> Create New Item</a> @endpermission </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>No</th> <th>Title</th> <th>Description</th> <th width="280px">Action</th> </tr> @foreach ($items as $key => $item) <tr> <td>{{ ++$i }}</td> <td>{{ $item->title }}</td> <td>{{ $item->description }}</td> <td> <a class="btn btn-info" href="{{ route('itemCRUD2.show',$item->id) }}">Show</a> @permission('item-edit') <a class="btn btn-primary" href="{{ route('itemCRUD2.edit',$item->id) }}">Edit</a> @endpermission @permission('item-delete') {!! Form::open(['method' => 'DELETE','route' => ['itemCRUD2.destroy', $item->id],'style'=>'display:inline']) !!} {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} {!! Form::close() !!} @endpermission </td> </tr> @endforeach </table> {!! $items->render() !!} @endsection
resources/views/ItemCRUD2/create.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Create New Item</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('itemCRUD2.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::open(array('route' => 'itemCRUD2.store','method'=>'POST')) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Title:</strong> {!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/ItemCRUD2/index.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Items CRUD</h2> </div> <div class="pull-right"> @permission('item-create') <a class="btn btn-success" href="{{ route('itemCRUD2.create') }}"> Create New Item</a> @endpermission </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>No</th> <th>Title</th> <th>Description</th> <th width="280px">Action</th> </tr> @foreach ($items as $key => $item) <tr> <td>{{ ++$i }}</td> <td>{{ $item->title }}</td> <td>{{ $item->description }}</td> <td> <a class="btn btn-info" href="{{ route('itemCRUD2.show',$item->id) }}">Show</a> @permission('item-edit') <a class="btn btn-primary" href="{{ route('itemCRUD2.edit',$item->id) }}">Edit</a> @endpermission @permission('item-delete') {!! Form::open(['method' => 'DELETE','route' => ['itemCRUD2.destroy', $item->id],'style'=>'display:inline']) !!} {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} {!! Form::close() !!} @endpermission </td> </tr> @endforeach </table> {!! $items->render() !!} @endsection
resources/views/ItemCRUD2/create.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Create New Item</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('itemCRUD2.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::open(array('route' => 'itemCRUD2.store','method'=>'POST')) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Title:</strong> {!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/ItemCRUD2/edit.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Edit New Item</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('itemCRUD2.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::model($item, ['method' => 'PATCH','route' => ['itemCRUD2.update', $item->id]]) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Title:</strong> {!! Form::text('title', null, array('placeholder' => 'Title','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/ItemCRUD2/show.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2> Show Item</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('itemCRUD2.index') }}"> Back</a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Title:</strong> {{ $item->title }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {{ $item->description }} </div> </div> </div> @endsection
resources/views/roles/index.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Role Management</h2> </div> <div class="pull-right"> @permission('role-create') <a class="btn btn-success" href="{{ route('roles.create') }}"> Create New Role</a> @endpermission </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>No</th> <th>Name</th> <th>Description</th> <th width="280px">Action</th> </tr> @foreach ($roles as $key => $role) <tr> <td>{{ ++$i }}</td> <td>{{ $role->display_name }}</td> <td>{{ $role->description }}</td> <td> <a class="btn btn-info" href="{{ route('roles.show',$role->id) }}">Show</a> @permission('role-edit') <a class="btn btn-primary" href="{{ route('roles.edit',$role->id) }}">Edit</a> @endpermission @permission('role-delete') {!! Form::open(['method' => 'DELETE','route' => ['roles.destroy', $role->id],'style'=>'display:inline']) !!} {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!} {!! Form::close() !!} @endpermission </td> </tr> @endforeach </table> {!! $roles->render() !!} @endsection
resources/views/roles/create.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Create New Role</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('roles.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::open(array('route' => 'roles.store','method'=>'POST')) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {!! Form::text('name', null, array('placeholder' => 'Name','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Display Name:</strong> {!! Form::text('display_name', null, array('placeholder' => 'Display Name','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Permission:</strong> <br/> @foreach($permission as $value) <label>{{ Form::checkbox('permission[]', $value->id, false, array('class' => 'name')) }} {{ $value->display_name }}</label> <br/> @endforeach </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/roles/edit.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Edit Role</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('roles.index') }}"> Back</a> </div> </div> </div> @if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif {!! Form::model($role, ['method' => 'PATCH','route' => ['roles.update', $role->id]]) !!} <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {!! Form::text('display_name', null, array('placeholder' => 'Name','class' => 'form-control')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {!! Form::textarea('description', null, array('placeholder' => 'Description','class' => 'form-control','style'=>'height:100px')) !!} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Permission:</strong> <br/> @foreach($permission as $value) <label>{{ Form::checkbox('permission[]', $value->id, in_array($value->id, $rolePermissions) ? true : false, array('class' => 'name')) }} {{ $value->display_name }}</label> <br/> @endforeach </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> {!! Form::close() !!} @endsection
resources/views/roles/show.blade.php
@extends('layouts.app') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2> Show Role</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('roles.index') }}"> Back</a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {{ $role->display_name }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Description:</strong> {{ $role->description }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Permissions:</strong> @if(!empty($rolePermissions)) @foreach($rolePermissions as $v) <label class="label label-success">{{ $v->display_name }}</label> @endforeach @endif </div> </div> </div> @endsection
好的,现在你可以运行你的应用程序,并检查如果你发现错误:
This cache store does not support tagging
那么你可以通过这个地方进行问题的解决:
如果你想获得更多关于委托包的信息,请点击这里:Entrust。
文章的脚注信息由WordPress的wp-posturl插件自动生成
2017年09月28日 下午 3:37 沙发
你好,”Route [users.index] not defined. (View: D:\php\program\lxl_entrust_demo\blog\resources\views\layouts\app.blade.php) (View: D:\php\program\lxl_entrust_demo\blog\ ▶”,这个是我运行后报的错,麻烦帮我解决一下