diff --git a/composer.json b/composer.json index af3ebc6da..aace66d41 100755 --- a/composer.json +++ b/composer.json @@ -9,6 +9,12 @@ "type": "project", "require": { "php": "^7.1.3", + "ext-openssl": "*", + "ext-pdo": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-pdo_mysql": "*", + "ext-curl": "*", "barryvdh/laravel-dompdf": "^0.8.0@dev", "dimsav/laravel-translatable": "^9.0", "doctrine/dbal": "^2.9@dev", diff --git a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php index 28dfb17d6..82d221398 100755 --- a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php +++ b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php @@ -71,8 +71,56 @@ class AdminServiceProvider extends ServiceProvider } } - $tree->items = core()->sortItems($tree->items); + $allowedPermissions = auth()->guard('admin')->user()->role->permissions; + $withoutDots = array(); + foreach ($allowedPermissions as $key => $allowedPermission) { + if (!str_contains($allowedPermission, '.')) { + array_push($withoutDots, $allowedPermission); + } + } + + $levelThreeKey = function() use($allowedPermissions, $withoutDots) { + $collectSimilar = array(); + + foreach ($withoutDots as $key => $withoutDot) { + $group = array(); + + foreach ($allowedPermissions as $key1 => $allowedPermission) { + //pluck a level 3 group & match the dots + if (str_contains($allowedPermission, $withoutDot.'.')) { + array_push($group, $allowedPermission); + } + } + + $collectSimilar[$key] = $group; + unset($group); + } + + foreach ($collectSimilar as $collected) { + if (count($collected) > 1) { + $first = $collected[0]; + $second = $collected[1]; + + + //confirmed, level three key exists + if (str_contains($second, $first.'.')) { + //find the missing key + foreach (config('menu.admin') as $key => $menuItem) { + if ($menuItem['key'] == $first) { + if(bouncer()->hasPermission(config('menu.admin')[$key+1]['key'])) { + //condition met and now just alter the tree + } + } + } + } + } + } + }; + + $levelThreeKey(); + + $tree->items = core()->sortItems($tree->items); $view->with('menu', $tree); }); diff --git a/packages/Webkul/User/src/Bouncer.php b/packages/Webkul/User/src/Bouncer.php index ed74abb71..bd7bb23a2 100755 --- a/packages/Webkul/User/src/Bouncer.php +++ b/packages/Webkul/User/src/Bouncer.php @@ -18,7 +18,7 @@ class Bouncer if (! auth()->guard('admin')->check() || ! auth()->guard('admin')->user()->hasPermission($permission)) return false; } - + return true; } @@ -31,6 +31,6 @@ class Bouncer public static function allow($permission) { if (! auth()->guard('admin')->check() || ! auth()->guard('admin')->user()->hasPermission($permission)) - abort(401, 'This action is unauthorized.'); + abort(401, 'This action is unauthorized'); } } \ No newline at end of file