Bài 23: Phân quyền với gate và policy,

Bài 23: Phân quyền với gate và policy,

  

-    Vào AuthServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

Gate::define('category_list', function ($user) {
return $user->checkPermissionAccess('list_category');
});
Gate::define('menu_list', function ($user) {
return $user->checkPermissionAccess('list_menu');
});

}
}
-    Vào web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index',
'middleware'=>'can:category_list',
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create'
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index',
'middleware'=>'can:menu_list',
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);
Route::get('/create',[
'as'=> 'settings.create',
'uses' => 'AdminSettingController@create'
]);
Route::post('/store',[
'as'=> 'settings.store',
'uses' => 'AdminSettingController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'settings.edit',
'uses' => 'AdminSettingController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'settings.update',
'uses' => 'AdminSettingController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'settings.delete',
'uses' => 'AdminSettingController@delete'
]);
});

//User
Route::prefix('users')->group(function () {
Route::get('/',[
'as'=> 'users.index',
'uses' => 'AdminUserController@index'
]);
Route::get('/create',[
'as'=> 'users.create',
'uses' => 'AdminUserController@create'
]);
Route::post('/store',[
'as'=> 'users.store',
'uses' => 'AdminUserController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'users.edit',
'uses' => 'AdminUserController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'users.update',
'uses' => 'AdminUserController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'users.delete',
'uses' => 'AdminUserController@delete'
]);
});

//Role
Route::prefix('roles')->group(function () {
Route::get('/',[
'as'=> 'roles.index',
'uses' => 'AdminRoleController@index'
]);
Route::get('/create',[
'as'=> 'roles.create',
'uses' => 'AdminRoleController@create'
]);
Route::post('/store',[
'as'=> 'roles.store',
'uses' => 'AdminRoleController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'roles.edit',
'uses' => 'AdminRoleController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'roles.update',
'uses' => 'AdminRoleController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'roles.delete',
'uses' => 'AdminRoleController@delete'
]);
});
});


-    Vào User.php
<?php

namespace App;

use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use Notifiable,SoftDeletes;

/**
* 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',
];

/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function roles()
{
return $this->belongsToMany(Role::class,'role_user','user_id','role_id');
}
public function checkPermissionAccess($permissionCheck)
{
//Ly được tt c các quyn ca user đang login h thng
//so sánh giá tr ca router hin ti có tn ti trong các quyn mà mình
//ly được hay không

$roles = auth()->user()->roles;
foreach ($roles as $role){
$permissions = $role->permissions;
if ($permissions->contains('key_code', $permissionCheck)){
return true;
}
}
return false;
}
}
-    Vào AuthServiceProvider
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

Gate::define('category_list', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.list_category'));
});
Gate::define('menu_list', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.list_menu'));
})
;
}
}
-    Vào config tạo file permissions.php
<?php

return[
'access'=>[
'list-category'=>'list-category',
'lisr-menu' => 'lisr-menu'
]
];
-    Vào siderbar.blade.php
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-dark-primary elevation-4">
<!-- Brand Logo -->
<a href="index3.html" class="brand-link">
<img src="{{asset('adminlte/dist/img/AdminLTELogo.png')}}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3" style="opacity: .8">
<span class="brand-text font-weight-light">AdminLTE 3</span>
</a>

<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="image">
<img src="{{ asset('adminlte/dist/img/user2-160x160.jpg') }}" class="img-circle elevation-2" alt="User Image">
</div>
<div class="info">
<a href="#" class="d-block">Alexander Pierce</a>
</div>
</div>

<!-- SidebarSearch Form -->
<div class="form-inline">
<div class="input-group" data-widget="sidebar-search">
<input class="form-control form-control-sidebar" type="search" placeholder="Search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-sidebar">
<i class="fas fa-search fa-fw"></i>
</button>
</div>
</div>
</div>

<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->

<li class="nav-item">
<a href="{{ route('categories.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Danh mc sn phm
<span class="right badge badge-danger">New</span>
</p>
</a>
</li>

<li class="nav-item">
<a href="{{ route('menus.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Menus
</p>
</a>
</li>

<li class="nav-item">
<a href="{{ route('product.index') }}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Sn phm
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('slider.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Slider
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('settings.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Settings
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('users.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Danh sách nhân viên
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('roles.index')}}" class="nav-link">
<i class="nav-icon fas fa-th"></i>
<p>
Danh sách vai trò(Roles)
</p>
</a>
</li>

<li class="nav-item">
<a href="{{route('permissions.create')}}" class="nav-link">
<p>
To dliu bng permissions
</p>
</a>
</li>

</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>
-    Vào web.php
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index',
'middleware'=>'can:category_list',
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create'
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index',
'middleware'=>'can:menu_list',
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);
Route::get('/create',[
'as'=> 'settings.create',
'uses' => 'AdminSettingController@create'
]);
Route::post('/store',[
'as'=> 'settings.store',
'uses' => 'AdminSettingController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'settings.edit',
'uses' => 'AdminSettingController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'settings.update',
'uses' => 'AdminSettingController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'settings.delete',
'uses' => 'AdminSettingController@delete'
]);
});

//User
Route::prefix('users')->group(function () {
Route::get('/',[
'as'=> 'users.index',
'uses' => 'AdminUserController@index'
]);
Route::get('/create',[
'as'=> 'users.create',
'uses' => 'AdminUserController@create'
]);
Route::post('/store',[
'as'=> 'users.store',
'uses' => 'AdminUserController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'users.edit',
'uses' => 'AdminUserController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'users.update',
'uses' => 'AdminUserController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'users.delete',
'uses' => 'AdminUserController@delete'
]);
});

//Role
Route::prefix('roles')->group(function () {
Route::get('/',[
'as'=> 'roles.index',
'uses' => 'AdminRoleController@index'
]);
Route::get('/create',[
'as'=> 'roles.create',
'uses' => 'AdminRoleController@create'
]);
Route::post('/store',[
'as'=> 'roles.store',
'uses' => 'AdminRoleController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'roles.edit',
'uses' => 'AdminRoleController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'roles.update',
'uses' => 'AdminRoleController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'roles.delete',
'uses' => 'AdminRoleController@delete'
]);
});

//Permissions
Route::prefix('permissions')->group(function () {
Route::get('/create',[
'as'=> 'permissions.create',
'uses' => 'AdminRoleController@createPermissions'
]);

})
;
});
-    Vào AdminRoleController.php
<?php

namespace App\Http\Controllers;
use App\Permission;
use App\Role;
use App\Traits\DeleteModelTrait;
use Illuminate\Http\Request;

class AdminRoleController extends Controller
{
use DeleteModelTrait;
private $role;
private $permission;
public function __construct(Role $role,Permission $permission)
{
$this->role = $role;
$this->permission = $permission;
}
public function index()
{
$roles = $this->role->paginate(10);
return view('admin.role.index',compact('roles'));
}
public function create()
{
$permissionsParent = $this->permission->where('parent_id',0)->get();
return view('admin.role.add',compact('permissionsParent'));
}
public function store(Request $request)
{
$role = $this->role->create([
'name'=>$request->name,
'display_name'=>$request->display_name
]);

$role->permissions()->attach($request->permission_id);
return redirect()->route('roles.index');
}
public function edit($id)
{
$permissionsParent = $this->permission->where('parent_id',0)->get();
$role = $this->role->find($id);
$permissionsChecked = $role->permissions;
return view('admin.role.edit',compact('permissionsParent','role','permissionsChecked'));
}
public function update(Request $request,$id)
{
$role = $this->role->find($id);
$role->update([
'name'=>$request->name,
'display_name'=>$request->display_name
]);
$role->permissions()->sync($request->permission_id);
return redirect()->route('roles.index');
}
public function delete($id)
{
return $this->deleteModelTrait($id, $this->role);
}

public function createPermissions()
{
return view('admin.permission.add');
}
}
-    Vào admin Tạo permission Tạo file add.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Trang ch</title>
@endsection

@section('content')
<div class="content-wrapper">
@include('partials.content-header',['name'=>'Permissions', 'key'=>'Add']);

<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<form action="{{ route('menus.store')}}" method="post">
@csrf
<div class="form-group">
<label>Chn phân quyn cha</label>
<select class="form-control"
name="parent_id">
<option value="0">Chn menu cha</option>
<option value="0">Chn menu cha</option>
<option value="0">Chn menu cha</option>
</select>
</div>
<div class="form-group">
<div class="row">
<div class="col-md-3">
<label for="">
<input type="checkbox" value="list">
Danh sách
</label>
</div>
<div class="col-md-3">
<label for="">
<input type="checkbox" value="add">
Thêm
</label>
</div>
<div class="col-md-3">
<label for="">
<input type="checkbox" value="edit">
Sa
</label>
</div>
<div class="col-md-3">
<label for="">
<input type="checkbox" value="delete">
Xóa
</label>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

</div>
</div>
</div>
</div>
@endsection
-    Trình duyệt

-    Vào AuthServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];

/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();

Gate::define('category_list', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.list_category'));
});
Gate::define('category_add', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.add_category'));
});
Gate::define('category_edit', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.edit_category'));
});
Gate::define('menu_list', function ($user) {
return $user->checkPermissionAccess(config('permissions.access.list_menu'));
});
}
}
-    Vào admin Tạo permission vào file add.blade.php
<!-- Stored in resources/views/child.blade.php -->

@extends('layouts.admin')

@section('title')
<title>Trang ch</title>
@endsection

@section('content')
<div class="content-wrapper">
@include('partials.content-header',['name'=>'Permissions', 'key'=>'Add']);

<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<form action="{{ route('permissions.store')}}" method="post">
@csrf
<div class="form-group">
<label>Chn phân quyn cha</label>
<select class="form-control" name="module_parent">
<option value="">Chn tên module</option>
@foreach(config('permissions.table_module') as $moduleItem)
<option value="{{$moduleItem}}">{{$moduleItem}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<div class="row">

@foreach(config('permissions.module_childrent') as $moduleItemChilrent)
<div class="col-md-3">
<label for="">
<input type="checkbox"
value="{{$moduleItemChilrent}}"
name="module_chilrent[]">
{{$moduleItemChilrent}}
</label>
</div>
@endforeach
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>

</div>
</div>
</div>
</div>
@endsection
-    Vào config tạo  permissions.php
<?php

return[
'access'=>[
'list_category'=>'category_list',
'add_category'=>'category_add',
'edit_category' => 'category_edit',
'list_menu' => 'menu_list',
],
'table_module' =>[
'category',
'slider',
'menu',
'product',
'setting',
'user',
'role'
],
'module_childrent' =>[
'list',
'add',
'edit',
'delete'
]
];
-    Vào web.php
<?php

Route::get('/admin', 'AdminController@loginAdmin');
Route::post('/admin', 'AdminController@postloginAdmin');

Route::get('/home', function () {
return view('home');
});

Route::prefix('admin')->group(function () {
//category
Route::prefix('categories')->group(function () {
Route::get('/',[
'as'=> 'categories.index',
'uses' => 'CategoryController@index',
'middleware'=>'can:category_list',
]);

Route::get('/create',[
'as'=> 'categories.create',
'uses' => 'CategoryController@create',
'middleware'=>'can:category_add',
]);
Route::post('/store',[
'as'=> 'categories.store',
'uses' => 'CategoryController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'categories.edit',
'uses' => 'CategoryController@edit',
'middleware'=>'can:category_edit',
]);
Route::post('/update/{id}',[
'as'=> 'categories.update',
'uses' => 'CategoryController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'categories.delete',
'uses' => 'CategoryController@delete'
]);
});
//menu
Route::prefix('menus')->group(function () {
Route::get('/',[
'as'=> 'menus.index',
'uses' => 'MenuController@index',
'middleware'=>'can:menu_list',
]);
Route::get('/create',[
'as'=> 'menus.create',
'uses' => 'MenuController@create'
]);
Route::post('/store',[
'as'=> 'menus.store',
'uses' => 'MenuController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'menus.edit',
'uses' => 'MenuController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'menus.update',
'uses' => 'MenuController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'menus.delete',
'uses' => 'MenuController@delete'
]);
});

//Product
Route::prefix('product')->group(function () {
Route::get('/',[
'as'=> 'product.index',
'uses' => 'AdminProductController@index'
]);
Route::get('/create',[
'as'=> 'product.create',
'uses' => 'AdminProductController@create'
]);
Route::post('/store',[
'as'=> 'product.store',
'uses' => 'AdminProductController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'product.edit',
'uses' => 'AdminProductController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'product.update',
'uses' => 'AdminProductController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'product.delete',
'uses' => 'AdminProductController@delete'
]);
});

//Slider
Route::prefix('slider')->group(function () {
Route::get('/',[
'as'=> 'slider.index',
'uses' => 'SliderAdminController@index'
]);
Route::get('/create',[
'as'=> 'slider.create',
'uses' => 'SliderAdminController@create'
]);
Route::post('/store',[
'as'=> 'slider.store',
'uses' => 'SliderAdminController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'slider.edit',
'uses' => 'SliderAdminController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'slider.update',
'uses' => 'SliderAdminController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'slider.delete',
'uses' => 'SliderAdminController@delete'
]);
});

//Settings
Route::prefix('settings')->group(function () {
Route::get('/',[
'as'=> 'settings.index',
'uses' => 'AdminSettingController@index'
]);
Route::get('/create',[
'as'=> 'settings.create',
'uses' => 'AdminSettingController@create'
]);
Route::post('/store',[
'as'=> 'settings.store',
'uses' => 'AdminSettingController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'settings.edit',
'uses' => 'AdminSettingController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'settings.update',
'uses' => 'AdminSettingController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'settings.delete',
'uses' => 'AdminSettingController@delete'
]);
});

//User
Route::prefix('users')->group(function () {
Route::get('/',[
'as'=> 'users.index',
'uses' => 'AdminUserController@index'
]);
Route::get('/create',[
'as'=> 'users.create',
'uses' => 'AdminUserController@create'
]);
Route::post('/store',[
'as'=> 'users.store',
'uses' => 'AdminUserController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'users.edit',
'uses' => 'AdminUserController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'users.update',
'uses' => 'AdminUserController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'users.delete',
'uses' => 'AdminUserController@delete'
]);
});

//Role
Route::prefix('roles')->group(function () {
Route::get('/',[
'as'=> 'roles.index',
'uses' => 'AdminRoleController@index'
]);
Route::get('/create',[
'as'=> 'roles.create',
'uses' => 'AdminRoleController@create'
]);
Route::post('/store',[
'as'=> 'roles.store',
'uses' => 'AdminRoleController@store'
]);
Route::get('/edit/{id}',[
'as'=> 'roles.edit',
'uses' => 'AdminRoleController@edit'
]);
Route::post('/update/{id}',[
'as'=> 'roles.update',
'uses' => 'AdminRoleController@update'
]);
Route::get('/delete/{id}',[
'as'=> 'roles.delete',
'uses' => 'AdminRoleController@delete'
]);
});

//Permissions
Route::prefix('permissions')->group(function () {
Route::get('/create',[
'as'=> 'permissions.create',
'uses' => 'AdminPremissionController@createPermissions'
]);
Route::post('/store',[
'as'=> 'permissions.store',
'uses' => 'AdminPremissionController@store'
]);

});
});
-    Vào terminal chạy :php artisan make:controller AdminPremissionController
<?php

namespace App\Http\Controllers;

use App\Permission;
use Illuminate\Http\Request;

class AdminPremissionController extends Controller
{
public function createPermissions()
{
return view('admin.permission.add');
}
public function store(Request $request)
{
$pemission = Permission::create([
'name'=>$request->module_parent,
'display_name'=>$request->module_parent,
'parent_id'=>0,
'key_code'=>''
]);
foreach ($request->module_chilrent as $value){
Permission::create([
'name'=>$value,
'display_name'=>$value,
'parent_id'=>$pemission->id,
'key_code' => $request->module_parent . '_' . $value
]);
}
}
}
-    Vào Permission.php
<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Permission extends Model
{
protected $guarded = [];
public function permissionChildrent()
{
return $this->hasMany(Permission::class,'parent_id');
}
}
-    Vào AdminRoleController.php
<?php

namespace App\Http\Controllers;
use App\Permission;
use App\Role;
use App\Traits\DeleteModelTrait;
use Illuminate\Http\Request;

class AdminRoleController extends Controller
{
use DeleteModelTrait;
private $role;
private $permission;
public function __construct(Role $role,Permission $permission)
{
$this->role = $role;
$this->permission = $permission;
}
public function index()
{
$roles = $this->role->paginate(10);
return view('admin.role.index',compact('roles'));
}
public function create()
{
$permissionsParent = $this->permission->where('parent_id',0)->get();
return view('admin.role.add',compact('permissionsParent'));
}
public function store(Request $request)
{
$role = $this->role->create([
'name'=>$request->name,
'display_name'=>$request->display_name
]);

$role->permissions()->attach($request->permission_id);
return redirect()->route('roles.index');
}
public function edit($id)
{
$permissionsParent = $this->permission->where('parent_id',0)->get();
$role = $this->role->find($id);
$permissionsChecked = $role->permissions;
return view('admin.role.edit',compact('permissionsParent','role','permissionsChecked'));
}
public function update(Request $request,$id)
{
$role = $this->role->find($id);
$role->update([
'name'=>$request->name,
'display_name'=>$request->display_name
]);
$role->permissions()->sync($request->permission_id);
return redirect()->route('roles.index');
}
public function delete($id)
{
return $this->deleteModelTrait($id, $this->role);
}
}

Đăng nhận xét

0 Nhận xét

myadcash