Laravel(5.0) Advanced Custom ACL

By | October 12th 2018 04:07:10 PM | viewed 283 times

Laravel(5.0) Advanced Custom ACL

Step-1:

Follow the basic laravel ACL    Go

Step-2:

Run the following command to create advanced permission table script

	d/xampp/htdocs/projectname> php artisan make:migration create_advanced_permission_role_table 
 

then go to the location database/migration/ cut file create_advanced_permission_role_table.php to migration/customacl/create_advanced_permission_role_table.php

then go to the location database/migration/customacl/ and edit create_advanced_permission_role_table.php file and replace all the following code

 
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAutheticationSetupTable extends Migration {

       public function up()
	   {
            Schema::create('permissions', function (Blueprint $table) {
                    $table->bigIncrements('id')->unsigned();
                    $table->string('controller_name')->nullable();
                    $table->string('method_type')->nullable();
                    $table->string('method_name')->nullable();
                    $table->string('relative_path')->nullable();
                    $table->string('route_path')->nullable();                   
                    $table->tinyInteger('active')->default(1);
                    $table->bigInteger('create_by')->unsigned()->nullable();
                    $table->bigInteger('update_by')->unsigned()->nullable();
                    $table->dateTime('create_date')->nullable();
                    $table->dateTime('update_date')->nullable();                   
                    $table->foreign('create_by')->references('id')->on('users')->onDelate('cascade');
                    $table->foreign('update_by')->references('id')->on('users')->onDelate('cascade');

                                                                        
        });
                  
          Schema::create('permission_roles', function(Blueprint $table){
			$table->bigInteger('permission_id')->unsigned();
                        $table->bigInteger('role_id')->unsigned();                       
                        $table->foreign('permission_id')->references('id')->on('permissions')->onDelate('cascade');
                        $table->foreign('role_id')->references('id')->on('roles')->onDelate('cascade');
                        $table->primary(['permission_id', 'role_id']);
                      
           });

	}

	
	public function down()
	{
	     Schema::drop('permissions');
         Schema::drop('permission_roles');
	}
}
 

Then run the following command to create table in the database

d/xampp/htdocs/projectname> php artisan migrate
d/xampp/htdocs/projectname> php artisan config:cache

Step-3:Create Model and their relation using the following command

To create model write the following command one after another

	d/xampp/htdocs/projectname> php artisan make:model App\Models\Auth\Permission.php
 

Edit the model file app/Models/Auth/Permission.php and replace all the following code to maintain relation to other tables

<?php namespace App\Models\Auth;

use Illuminate\Database\Eloquent\Model;

class Permission extends Model {

	    protected $table = 'permissions';
        public $timestamps = false;
        protected $guarded = ['id'];
              
        public function roles()
        {
            return $this->belongsToMany('App\Models\Auth\Role', 'permission_roles', 'permission_id', 'role_id');
        }
        
        public function users()
        {
            return $this->belongsTo('App\User','create_by','id');
        }
        
        public function updateBy()
        {           
            return $this->belongsTo('App\User','update_by','id');
        }

}

Step-4:Create Controller using the following command

Add PermissionController in the location App\Http\Controllers\Auth\ using the following command

   d/xampp/htdocs/projectname> php artisan make:controller Auth\PermissionController
 

After creating file replace all the following code

  <?php namespace App\Http\Controllers\Auth;
 
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
use Auth;
use App\Models\Auth\Role;
use App\Models\Auth\Permission;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Input;


class PermissionController extends Controller {

	public function index(Request $request)               
	{
            $ct;
            $rt;
            $permissions;
            $totalCount;
            $pageNo = 10;
            
            if (Input::has('ct') && Input::has('rt')) {
                
                //$ct = Input::get('ct');
                $ct = explode('\\',Input::get('ct'))[1];
                $rt =Input::get('rt');
                
                $permissions = Permission::orderBy('id','DESC')
                        ->where('controller_name','LIKE',"%$ct%")
                        ->where('route_path','LIKE',"%$rt%")
                        ->paginate($pageNo)
                        ->setPath(route('perm/index',['ct'=>$ct,'rt'=>$rt]));
                
                $totalCount = Permission::orderBy('id','DESC')
                        ->where('controller_name','LIKE',"%$ct%")
                        ->where('route_path','LIKE',"%$rt%")->count();
                
            }else if(Input::has('ct')){
                
                $ct = explode('\\',Input::get('ct'))[1];
               
                
                $permissions = Permission::orderBy('id','DESC')
                        ->where('controller_name','LIKE',"%$ct%")
                        ->paginate($pageNo)
                        ->setPath(route('perm/index',['ct'=>$ct]));
                
                 
                
                $totalCount = Permission::orderBy('id','DESC')
                        ->where('controller_name','LIKE',"%$ct%")->count();
                
            }else if(Input::has('rt')){
                
                $rt = trim(Input::get('rt'));
                
                 $permissions = Permission::orderBy('id','DESC')
                        ->where('route_path','LIKE',"%$rt%")
                        ->paginate($pageNo)
                        ->setPath(route('perm/index',['rt'=>$rt]));
                 
                 $totalCount = Permission::orderBy('id','DESC')
                        ->where('route_path','LIKE',"%$rt%")->count();
                
            }else{
                
                
              $permissions = Permission::orderBy('id','DESC')
                      ->paginate($pageNo)
                      ->setPath(route('perm/index'));
                 
                 $totalCount = Permission::orderBy('id','DESC')->count(); 
                               
            }
            
            
            //$controllerList =Permission::all()->lists('controller_name','id');
            //$controllerList =DB::select("select distinct id,controller_name from permissions");
            $controllerList = Permission::select('controller_name','controller_name')->groupBy('controller_name')->lists('controller_name','controller_name');
                             
           
            return view('auth.perm_index',compact('permissions','totalCount','controllerList')) ->with('i', ($request->input('page', 1) - 1) * 5);

               
	}

	
	public function create()               
	{
            $roleList =Role::all()->lists('role_name','id'); 
            $roleIdList = array();
	    return view('auth.perm_create',['roleList'=>$roleList,'permissionInstance'=>new Permission(),'roleIdList'=>$roleIdList]);
	}
        
     
	public function store(Request $request)
	{
             
	                     
           $insert =null;
           $sysRole = null;
           $permission = null;
           
           $i=0;
                      
           while($request->input('perm_'.$i.'_controller_name') && $request->input('perm_'.$i.'_relative_path')){
                                                    
                     $this->validate($request, [
                     'perm_'.$i.'_controller_name'=> 'regex:/^[A-Za-z-_\\\]{5,100}/',
                     'perm_'.$i.'_method_type'=> 'regex:/^[A-Za-z-_]{2,20}/',
                     'perm_'.$i.'_method_name'=> 'regex:/^[A-Za-z-_]{2,100}/',
                     'perm_'.$i.'_relative_path'=> 'regex:/^[A-Za-z-_\/\#]{1,50}/',
                     'perm_'.$i.'_route_path'  => 'regex:/^[A-Za-z-_\/\#]{1,50}/',
                     'perm_'.$i.'_active'=> 'regex:/^[0-9]{0,2}/'
                    ]);
                  

                        if ($request->input('perm_'.$i.'_method_type') && $request->input('perm_'.$i.'_role_id') && $request->input('perm_'.$i.'_new') == "true" && $request->input('perm_'.$i.'_deleted') == "false") {

                             $permission = new Permission();
                              
                               
                    
                                $permission->controller_name = $request->input('perm_'.$i.'_controller_name');
                                $permission->method_type= $request->input('perm_'.$i.'_method_type');
                                $permission->method_name= $request->input('perm_'.$i.'_method_name');
                                $permission->relative_path= $request->input('perm_'.$i.'_relative_path');
                                $permission->route_path= $request->input('perm_'.$i.'_route_path');
                                $permission->active = $request->input('perm_'.$i.'_active');
                                $permission->create_date = Carbon::now();
                                $permission->create_by = Auth::user()->id ;
                               
                               
                                           
                               $insert = $permission->save(); 
                               
                               if($request->input('perm_'.$i.'_role_id')[0]){
                                   
                                   $permission->roles()->sync($request->input('perm_'.$i.'_role_id'));
                                   
                               }
                              
                                         


                        }  // end if
                        
            
                 $i++;
            
           }
           
           
           
           if($insert){               
              return redirect()->route('perm/index')->with('success','Data insert successfull');  
            }else{
                
               //$permission::delete($insert->id); 
               return redirect()->route('perm/create')->with('success','Data insert fail');    
            }      
                   
                                                                                                                                                                                                                                                                                                     	
    }
	
	public function show($id)
	{
		//
	}

	
	public function edit($id)
	{
            
            $roleIdList = array();
	    $permissions = Permission::find($id);
           
            foreach($permissions->roles()->get() as $role){
                array_push($roleIdList,$role->id);
            }
            
            $roleList =Role::all()->lists('role_name','id');   
                                                                           
            return view('auth.perm_edit', compact('permissions','id','roleList','roleIdList'));
           

	}

	
	public function update(Request $request,$id)
	{
		                             
           $insert =null;
           $sysRole = null;
           $permission = null;
           
           $i=0;
                      
           while($request->input('perm_'.$i.'_controller_name') && $request->input('perm_'.$i.'_relative_path')){
                                                    
                     $this->validate($request, [
                     'perm_'.$i.'_controller_name'=> 'regex:/^[A-Za-z-_\\\]{5,100}/',
                     'perm_'.$i.'_method_type'=> 'regex:/^[A-Za-z-_]{2,20}/',
                     'perm_'.$i.'_method_name'=> 'regex:/^[A-Za-z-_]{2,100}/',
                     'perm_'.$i.'_relative_path'=> 'regex:/^[A-Za-z-_\/\#]{1,50}/',
                     'perm_'.$i.'_route_path'  => 'regex:/^[A-Za-z-_\/\#]{1,50}/',
                     'perm_'.$i.'_active'=> 'regex:/^[0-9]{0,2}/'
                    ]);
                  

                        if ($request->input('perm_'.$i.'_method_type') && $request->input('perm_'.$i.'_role_id') && $request->input('perm_'.$i.'_new') == "false" && $request->input('perm_'.$i.'_deleted') == "false") {

                             $permission = Permission::find($id);
                                                             
                    
                                $permission->controller_name = $request->input('perm_'.$i.'_controller_name');
                                $permission->method_type= $request->input('perm_'.$i.'_method_type');
                                $permission->method_name= $request->input('perm_'.$i.'_method_name');
                                $permission->relative_path= $request->input('perm_'.$i.'_relative_path');
                                $permission->route_path= $request->input('perm_'.$i.'_route_path');
                                $permission->active = $request->input('perm_'.$i.'_active');
                                $permission->create_date = Carbon::now();
                                $permission->create_by = Auth::user()->id ;
                               
                               
                                           
                               $insert = $permission->save();
                                                                                    
                               if( $request->input('perm_'.$i.'_role_id')[0]){
                                   
                                   $permission->roles()->sync($request->input('perm_'.$i.'_role_id'));
                                   
                               }else{
                                   
                                   $permission->roles()->detach(); 
                               }
                              

                        }  // end if
                        
            
                 $i++;
            
           }
           
           
           
           if($insert){
               
              return redirect()->route('perm/index')->with('success','Data update successfull');  
                     
           }else{
                            
               return redirect()->route('perm/create')->with('success','Data update fail');    
            }      
                   
                                                                                         
	}

	
	public function destroy($id)
	{
		 $permissions = Permission::find($id);
                                
                 if($permissions->roles()->detach()){
                     
                      $permissions->roles()->detach(); 
                      $permissions->delete(); 
                                                           
                    return redirect()->route('perm/index')->with('success','Data deleted successfully');
                 
                 }else{  
                     
                     $permissions->delete();
                  return redirect()->route('perm/index')->with('fail','Data delation fail');
                 }
                
                 

	}
    
}
  
  

Step-5:Create content files

Add the following code in the location resources/views/auth/user_create.blade.php

@extends('layouts.admin')
@section('content')
<div class="content contentPadding contentBg">
<div class="container-fluid">
	<div class="row">

                                @if(session('success'))
                                <div class="alert alert-success alert-dismissable">
                                 <p>{{{ session('success') }}}</p>
                                </div>
                                @endif
                                @if(session('fail'))
                                <div class="alert alert-success alert-dismissable">    
                                  <p>{{{ session('fail') }}}</p>
                                 </div>
                                @endif
                               
				
					@if (count($errors) > 0)
						<div class="alert alert-danger">
							<strong>Whoops!</strong> There were some problems with your input.<br>
							<ul>
								@foreach ($errors->all() as $error)
									<li>{{ $error }}</li>
								@endforeach
							</ul>
						</div>
					@endif
         <div class="panel panel-success">
              <div class="panel-heading">New Permission</div>
              
              <div class="panel-body">
                  
                        <form class="form-horizontal" role="form" method="POST" action="{{route('perm/store/ct/uk',['ct'=>csrf_token()])}}">
                                <input type="hidden" name="_token" value="{{ csrf_token()}}">

                               <table id="detailList" class="width100">
                                          @include('auth.perm_dtl',['i'=>0,'hidden'=>false,'perm'=>$permissionInstance])
                                </table>


                               <div class="form-group">
                                        <div class="col-md-12" align="center">
                                                <input type="button" class="ym-primary btn btn-warning btn-sm" style="margin: 5px;" value="Add More" onclick="addChild();"/>
                                        </div>
                                </div>


                                <div class="form-group">
                                        <div class="col-md-12" align="center">
                                                <button type="submit" class="btn btn-primary">
                                                        Submit
                                                </button>
                                        </div>
                                </div>
                        </form>
				</div>
			</div>
		</div>
	</div>
</div>    
@endsection

Add the following code in the location resources/views/auth/perm_dtl.blade.php

<script type="text/javascript">
    
       
			var childCount = 1;

			$(document).on('click',".delButton",function(){
                              
				var prnt = $(this).parents(".detail-div");
				var delInput = prnt.find("input[id$=deleted]");
                                
				delInput.attr('value', 'true');
				prnt.hide();
			});
                        
                       



			function addChild() {
                            
				var clone = $("#detail0").clone();
				var htmlId = 'perm_' + childCount + '_';
                                
				

				clone.find("input[id$=id]")
						.attr('id', htmlId + 'id')
						.attr('name', htmlId + 'id');
				clone.find("input[id$=deleted]")
						.attr('id', htmlId + 'deleted')
						.attr('name', htmlId + 'deleted');
				clone.find("input[id$=new]")
						.attr('id', htmlId + 'new')
						.attr('name', htmlId + 'new')
						.attr('value', 'true');

				
				clone.find("input[id$=controller_name]").attr('id', htmlId + 'controller_name').attr('name', htmlId + 'controller_name');
				clone.find("select[id$=method_type]").attr('id', htmlId + 'method_type').attr('name', htmlId + 'method_type');
				clone.find("input[id$=method_name]").attr('id', htmlId + 'method_name').attr('name', htmlId + 'method_name');
                                clone.find("input[id$=relative_path]").attr('id', htmlId + 'method_name').attr('name', htmlId + 'relative_path');
                                clone.find("input[id$=route_path]").attr('id', htmlId + 'route_path').attr('name', htmlId + 'route_path');
				clone.find("select[id$=active]").attr('id', htmlId + 'active').attr('name', htmlId + 'active');
                                clone.find("select[id$=role_id]").attr('id', htmlId + 'role_id').attr('name', htmlId + 'role_id[]');

				clone.attr('id', 'detail' + childCount);
				clone.attr('name', 'tr[' + childCount+']');
				$("#detailList").append(clone);
				clone.show();
				childCount++;
			}
</script>
 


<tr id="detail{{$i}}" name="tr[{{$i}}]" class="detail-div" <?php if($hidden){ ?> style="display:none;"<?php }?>>
         <input type="hidden" id="perm_{{$i}}_id" name="perm_{{$i}}_id" value="{{$perm->id}}"/>
	     <input type="hidden" id="perm_{{$i}}_deleted"  name="perm_{{$i}}_deleted" value='false'/>
         <input type="hidden" id="perm_{{$i}}_new"  name="perm_{{$i}}_new" value="{{$perm->id == null ? 'true' : 'false'}}"/>

	<td>
                <div class="form-group col-md-4">
                         <label>Controller Name</label>
                         <div>
                         <input type="text" pattern="^[A-Za-z_-\\]{5,100}" class="form-control" id="perm_{{$i}}_controller_name" name="perm_{{$i}}_controller_name" value="{{$perm->controller_name}}">
                         </div>
                 </div>
                 <div class="form-group col-md-4">
                         <label>Method Type</label>
                         <div>
                             {!! Form::select('perm_'.$i.'_method_type', array('get' => 'get','post' => 'post','put' => 'put','delete' => 'delete'),$perm->method_type,['class' => 'form-control margin','id'=>'perm_'.$i.'_method_type']);!!}
                         </div>
                 </div>

                  <div class="form-group col-md-4">
                         <label>Method Name</label>
                         <div>
                         <input type="text" pattern="^[A-Za-z_-]{2,100}" class="form-control" id="perm_{{$i}}_method_name"  name="perm_{{$i}}_method_name" value="{{ $perm->method_name }}">
                         </div>
                 </div>

                 <div class="form-group col-md-4">
                         <label>Relative Path</label>
                         <div>
                                 <input type="text" pattern="^[A-Za-z_-\/\#]{1,50}" class="form-control" id="perm_{{$i}}_relative_path" name="perm_{{$i}}_relative_path" value="{{ $perm->relative_path }}">
                         </div>
                  </div>

                 <div class="form-group col-md-4">
                         <label>Route Path</label>
                         <div>
                                 <input type="text" pattern="^[A-Za-z_-\/\#]{1,50}" class="form-control" id="perm_{{$i}}_route_path" name="perm_{{$i}}_route_path" value="{{ $perm->route_path }}">
                         </div>
                 </div>


                 <div class="form-group col-md-4">
                         <label>Is Publish</label>
                         <div>
                                 {!! Form::select('perm_'.$i.'_active',array('1' => 'Publish','0' => 'Unpublish'),$perm->active,['class' => 'form-control margin','id'=>'perm_'.$i.'_active']);!!}
                         </div>
                 </div>

                 <div class="form-group col-md-4 cls">
                         <label>Permission Role</label>
                         <div>
                                 {!! Form::select("perm_".$i."_role_id[]",[null=>'Select One']+$roleList, (($roleIdList)? $roleIdList:null), ['multiple'=>true,'class' => 'form-control margin','id'=>"perm_".$i."_role_id"]) !!}
                         </div>
                 </div>

						

</td>

	<td>
            <span class='delButton' id='delButton' name='results_{{$i}}_delButton'><img src="{{ asset('public/images/database_delete.png') }}"/></span>
            
	</td>
</tr>

Add the following code in the location resources/views/auth/perm_index.blade.php

@extends('layouts.admin')

@section('content')
<div class="content contentPadding contentBg">
<div class="container-fluid">
	<div class="row">

                                @if(session('success'))
                                <div class="alert alert-success alert-dismissable">
                                 <p>{{{ session('success') }}}</p>
                                </div>
                                @endif
                                @if(session('fail'))
                                <div class="alert alert-success alert-dismissable">    
                                  <p>{{{ session('fail') }}}</p>
                                 </div>
                                @endif
                               
				
					@if (count($errors) > 0)
						<div class="alert alert-danger">
							<strong>Whoops!</strong> There were some problems with your input.<br>
							<ul>
								@foreach ($errors->all() as $error)
									<li>{{ $error }}</li>
								@endforeach
							</ul>
						</div>
					@endif
		
			
            <div class="panel panel-success">
              <div class="panel-heading">
                 Permission List
                  <a href="{{route('perm/create')}}" class="btn pull-right btn-xs btn-warning"> <span class="glyphicon glyphicon-plus-sign"></a>
              </div>
              <div class="panel-body">
                  
                  <div class="search">
                      
                       <div class="panel panel-info">                        
                            <div class="panel-body">
                                
                              <form action="{{URL::to('perm/index')}}" method="GET">
                                    <div class="form-group col-md-4">
                                         <label>Controller Name</label>
                                          <div>
                                              {!! Form::select('ct',[null=>'Select One']+$controllerList,null,['class'=>'form-control']);!!}
                                          </div>
                                   </div>

                                  <div class="form-group col-md-4">
                                         <label>Route Name</label>
                                         <div>
                                         <input type="text"  class="form-control"   name="rt" value="{{ old('rt') }}">
                                         </div>
                                 </div>

                                  <div class="form-group">
                                                  <div class="col-md-12" align="center">
                                                          <button type="submit" class="btn btn-primary">
                                                                  Search
                                                          </button>
                                                  </div>
                                    </div>
                                </form>
                                
                            </div>
                         </div>
                      
                  </div>
                  
                  <div class="table-responsive cls"> 
                      
                            <table class="table table-hover table-bordered">
                              <thead>
                                <tr>
                                  <th>Sl No.</th>
                                  <th>Action</th>
                                  <th>Relative Path</th>
                                  <th>Route Path</th>
                                  <th>Method Name</th>
                                  <th>Method Type</th>
                                  <th>Controller Name</th>
                                  <th>Permission Role</th>
                                  <th>Is Active</th>
                                  <th>Create By</th>
                                  <th>Update By</th>
                                  <th>Create Date</th>
                                  <th>Update Date</th>
                                  <th>Action</th>
                                </tr>
                              </thead>
                              <tbody>
                                  <?php $i=0;?>
                                 @foreach ($permissions as $key => $post)
                                <tr>
                                   <td>{{$i+1}}</td>
                                   <td>
                                     <ul class="list">
                                           <li><a href="{{route('perm/edit/id',['id'=>$post->id])}}" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-edit"></span> </a></li>
                            
                                            <li><a href="{{route('perm/delete/id',['id'=>$post->id])}}" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-remove-sign"></span></a></li>
                                       </ul>
                                  </td>
                                   <td >{{$post->relative_path}}</td>
                                   <td >{{$post->route_path}}</td>
                                   <td >{{$post->method_name}}</td>
                                   <td >{{$post->method_type}}</td>
                                   <td >{{$post->controller_name}}</td>
                                   <td >
                                       @foreach($post->roles()->get() as $role)
                                       {{$role->role_name}}
                                       @endforeach
                                  </td>
                                   <td >{{$post->active}}</td>
                                  
                                   <td >
                                      @if($post->create_by)
                                     
                                      {{$post->users->user_name}}
                                      @endif
                                  </td>
                                   <td >
                                      @if($post->update_by)
                                      {{$post->updateBy->user_name}}
                                      @endif
                                  </td>
                                   
                                   <td >
                                      @if($post->create_date)
                                      {{\Carbon\Carbon::parse($post->create_date)->format('d/m/Y h:i A')}}
                                      @endif
                                  </td>
                                   <td >
                                      @if($post->update_date)
                                      {{\Carbon\Carbon::parse($post->update_date)->format('d/m/Y h:i A')}}
                                      @endif
                                  </td>
                                  
                                    <td >
                                       <ul class="list">
                                           <li><a href="{{route('perm/edit/id',['id'=>$post->id])}}" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-edit"></span> </a></li>
                                            <li><a href="{{route('perm/delete/id',['id'=>$post->id])}}" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-remove-sign"></span></a></li>
                                       </ul>
                                     </td>
                                </tr>
                                  <?php $i++; ?>
                                @endforeach
                                
                              </tbody>
                            </table>
                          </div>
                      <div>show: {{$permissions->count()}} of total {{$totalCount}}</div>
                             {!! $permissions->render() !!}
              </div>
             </div>
		
	 </div>
 </div>
     </div>
@endsection

Add the following code in the location resources/views/auth/perm_edit.blade.php


@extends('layouts.admin')
@section('content')
<div class="content contentPadding contentBg">
<div class="container-fluid">
	<div class="row">

                                @if(session('success'))
                                <div class="alert alert-success alert-dismissable">
                                 <p>{{{ session('success') }}}</p>
                                </div>
                                @endif
                                @if(session('fail'))
                                <div class="alert alert-success alert-dismissable">    
                                  <p>{{{ session('fail') }}}</p>
                                 </div>
                                @endif
                               
				
					@if (count($errors) > 0)
						<div class="alert alert-danger">
							<strong>Whoops!</strong> There were some problems with your input.<br>
							<ul>
								@foreach ($errors->all() as $error)
									<li>{{ $error }}</li>
								@endforeach
							</ul>
						</div>
					@endif
         <div class="panel panel-success">
              <div class="panel-heading">Update Permission</div>
              
              <div class="panel-body">
                  
                        <form class="form-horizontal" role="form" method="POST" action="{{route('perm/update/id',['id'=>$permissions->id])}}">
                                <input type="hidden" name="_token" value="{{ csrf_token()}}">

                               <table id="detailList" class="width100">
                                          @include('auth.perm_dtl',['i'=>0,'hidden'=>false,'perm'=>$permissions])
                                </table>


                               <div class="form-group">
                                        <div class="col-md-12" align="center">
                                                <input type="button" class="ym-primary btn btn-warning btn-sm" style="margin: 5px;" value="Add More" onclick="addChild();"/>
                                        </div>
                                </div>


                                <div class="form-group">
                                        <div class="col-md-12" align="center">
                                                <button type="submit" class="btn btn-primary">
                                                         Update
                                                </button>
                                        </div>
                                </div>
                        </form>
				</div>
			</div>
		</div>
	</div>
</div>    
@endsection

Step-6:

Create a file RouteServices.php in the location app/Services/Menu/ and add the following code

<?php namespace App\Services\Menu;

use Auth;
use App\Models\Auth\Role;
use App\Models\Auth\Permission;
use DB;

 class RouteServices{
                
      public static function makePermission(){
                            
           $permissions = DB::table('permissions')
                     ->select(DB::raw('permissions.id,permissions.controller_name,permissions.method_type,permissions.method_name,permissions.relative_path,permissions.route_path,permissions.active'))
                     ->whereNotIn('controller_name',array('Web\HomeController','Web\DashboardController','Auth\AuthController','Auth\PasswordController'))
                     ->get();           
           return $permissions;
      }
      
      public static function getPermissionRole($permission_id){
           $role_name_array = array();
           $query ="select role_name from roles r,permission_roles pr \n";
           $query .="where r.id=pr.role_id \n";
           $query .="and pr.permission_id='".$permission_id."' \n";
                            
           $roles = DB::select($query);
           
           foreach($roles as $role){
               array_push($role_name_array,$role->role_name);
           }
                     
           return $role_name_array ;
     }
      
}

?>

Step-7:

Add the following code in the file Http/routes.php

    Route::get('perm/create',['uses' => 'Auth\PermissionController@create', 'as' => 'perm/create']);
	Route::post('perm/store/{ct}/{uk?}',['uses' => 'Auth\PermissionController@store', 'as' => 'perm/store/ct/uk']);
	Route::get('perm/index',['uses' => 'Auth\PermissionController@index', 'as' => 'perm/index']);
	Route::get('perm/edit/{id}',['uses' => 'Auth\PermissionController@edit', 'as' => 'perm/edit/id']);
	Route::post('perm/update/{id}',['uses' => 'Auth\PermissionController@update', 'as' => 'perm/update/id']);
	Route::get('perm/delete/{id}',['uses' => 'Auth\PermissionController@destroy', 'as' => 'perm/delete/id']);

Then brouse the url:http://localhost/perm/create input the route Route::get('perm/create',['uses' => 'Auth\PermissionController@create', 'as' => 'perm/create']); as follows fields

 post type: get,controller:Auth\PermissionController,method:create,url path:perm/create,route path:perm/create,is published:published,role:admin,user
 input... sequentially

Step-8:

Now replace route code of step-7 as follows


$routeServices = new \App\Services\Menu\RouteServices();

foreach($routeServices::makePermission() as $perm){
    if($perm->method_type=='get' && $routeServices::getPermissionRole($perm->id)){      
        Route::get($perm->relative_path,['middleware' => ['auth','roles'],'roles' => $routeServices::getPermissionRole($perm->id),'uses' =>$perm->controller_name.'@'.$perm->method_name, 'as' => $perm->route_path]);
    }else if($perm->method_type=='get' && ! $routeServices::getPermissionRole($perm->id)){ 
       Route::get($perm->relative_path,['uses' =>$perm->controller_name.'@'.$perm->method_name, 'as' => $perm->route_path]); 
    }else if($perm->method_type=='post' && $routeServices::getPermissionRole($perm->id)){
        Route::post($perm->relative_path,['middleware' => ['auth','roles'],'roles' => $routeServices::getPermissionRole($perm->id),'uses' =>$perm->controller_name.'@'.$perm->method_name, 'as' => $perm->route_path]);  
    }else if($perm->method_type=='post' && ! $routeServices::getPermissionRole($perm->id)){
        Route::post($perm->relative_path,['uses' =>$perm->controller_name.'@'.$perm->method_name, 'as' => $perm->route_path]);  
    }   
}

Again brouse the url:http://localhost/perm/create. if work fine, then acl is ok

bONEandALL