for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Sco\Admin;
use Auth;
use Illuminate\Support\Collection;
use Route;
use Illuminate\Foundation\Application;
use Sco\Admin\Config\ModelFactory;
use Illuminate\Config\Repository as ConfigRepository;
use Sco\Admin\Contracts\AdminInterface;
use Sco\Admin\Contracts\ConfigFactoryInterface;
class Admin implements AdminInterface
{
/**
* @var \Illuminate\Foundation\Application
*/
protected $app;
* @var \Illuminate\Config\Repository
protected $config;
protected $models;
public function __construct(Application $app)
$this->app = $app;
$this->config = new ConfigRepository(
$this->app['config']->get('admin', [])
);
$this->models = new Collection();
}
public function getMenus($list = null)
$list = $list ?: $this->config->get('menus');
$menus = collect();
foreach ($list as $key => $items) {
if (is_string($items)) {
if (Route::has($items)) {
if (Auth::user()->can($items)) {
$menus->push([
'title' => $key,
'url' => route($items, [], false),
'child' => [],
]);
} else {
$config = $this->app[ConfigFactoryInterface::class]->make($items);
if ($config && $config->getPermissions()->isViewable()) {
'title' => $config->getTitle(),
'url' => route(
'admin.model.index',
['model' => $items],
false
),
} elseif (is_array($items)) { // child
$childs = $this->getMenus($items);
if ($childs->isNotEmpty()) {
$menu = [
'url' => '/#',
'child' => $childs,
];
$menus->push($menu);
return $menus;