cms/app/Http/Middleware/CheckAdminMenuPagePermission.php

57 lines
1.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Middleware;
use Closure;
use Route;
use Arr;
/**
* 檢查Admin選單項目的route權限
*
* Class CheckAdminMenuPagePermission
* @package App\Http\Middleware
*/
class CheckAdminMenuPagePermission
{
/**
* 處理並檢查Admin選單項目的route權限
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//取得目前的Route
$currentRoute = Route::current();
//取得目前的Route Controller
$menuController = $currentRoute->controller;
//取得目前的Route Method
$method = $currentRoute->getActionMethod();
//如果Controller為選單項目的子類別
if(is_subclass_of($menuController, \App\Http\Controllers\Admin\Menu\BaseMenuItemController::class)) {
//如果方法為預設的route方法
if($method == 'handle') {
//取得slug組成的route name
$routeName = str_replace(config('admin.route_name_prefix') . config('admin.menu.route_name_prefix'), '', Route::currentRouteName());
//取得Admin選單項目
$adminMenu = app('AdminMenu')->getMenu();
//分解Slug
$slugs = explode('.', $routeName);
//如果slug數量大於1則為子選單controller
if(sizeof($slugs) > 1) {
$permission = Arr::get($adminMenu, "{$slugs[0]}.children.{$slugs[1]}.userHasPermission");
} else {
$permission = Arr::get($adminMenu, "{$slugs[0]}.userHasPermission");
}
if(!$permission) {
abort(403);
}
}
}
return $next($request);
}
}