From e0084c5d776bb7e1f6fdb534dbc43ca1f3ad3aa5 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Fri, 19 Nov 2021 14:13:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=A7=E6=89=BFdcat=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9D=83=E9=99=90=E8=8F=9C=E5=8D=95=E7=AE=A1=E7=90=86=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AdministratorController.php | 22 ++++ app/Admin/Controllers/MenuController.php | 100 ++++++++++++++++++ .../Controllers/PermissionController.php | 73 +++++++++++++ app/Admin/Controllers/RoleController.php | 22 ++++ app/Admin/routes.php | 8 +- database/seeders/AdminMenuSeeder.php | 18 ++++ database/seeders/AdminPermissionSeeder.php | 4 +- database/seeders/AdministratorSeeder.php | 18 ++++ 8 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 app/Admin/Controllers/AdministratorController.php create mode 100644 app/Admin/Controllers/MenuController.php create mode 100644 app/Admin/Controllers/PermissionController.php create mode 100644 app/Admin/Controllers/RoleController.php create mode 100644 database/seeders/AdminMenuSeeder.php create mode 100644 database/seeders/AdministratorSeeder.php diff --git a/app/Admin/Controllers/AdministratorController.php b/app/Admin/Controllers/AdministratorController.php new file mode 100644 index 00000000..00fab35e --- /dev/null +++ b/app/Admin/Controllers/AdministratorController.php @@ -0,0 +1,22 @@ +can('dcat.admin.administrator.create')) { + $grid->disableCreateButton(false); + $grid->enableDialogCreate(); + } + // $grid-> + return $grid; + } +} diff --git a/app/Admin/Controllers/MenuController.php b/app/Admin/Controllers/MenuController.php new file mode 100644 index 00000000..ea3d7d47 --- /dev/null +++ b/app/Admin/Controllers/MenuController.php @@ -0,0 +1,100 @@ +title($this->title()) + ->description(trans('admin.list')) + ->body(function (Row $row) { + $row->column(7, $this->treeView()->render()); + if (Admin::user()->can('dcat.admin.menus.create')) { + $row->column(5, function (Column $column) { + $form = new WidgetForm(); + $form->action(admin_url('auth/menu')); + + $menuModel = config('admin.database.menu_model'); + $permissionModel = config('admin.database.permissions_model'); + $roleModel = config('admin.database.roles_model'); + + $form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions()); + $form->text('title', trans('admin.title'))->required(); + $form->icon('icon', trans('admin.icon'))->help($this->iconHelp()); + $form->text('uri', trans('admin.uri')); + + if ($menuModel::withRole()) { + $form->multipleSelect('roles', trans('admin.roles'))->options($roleModel::all()->pluck('name', 'id')); + } + if ($menuModel::withPermission()) { + $form->tree('permissions', trans('admin.permission')) + ->expand(false) + ->treeState(false) + ->nodes((new $permissionModel())->allNodes()); + } + + $form->width(9, 2); + + $column->append(Box::make(trans('admin.new'), $form)); + }); + } + }); + } + + /** + * @return \Dcat\Admin\Tree + */ + protected function treeView() + { + $menuModel = config('admin.database.menu_model'); + + return new Tree(new $menuModel(), function (Tree $tree) { + $tree->disableCreateButton(); + $tree->disableQuickCreateButton(); + $tree->disableEditButton(); + $tree->maxDepth(3); + if (Admin::user()->cannot('dcat.admin.menus.edit')) { + $tree->disableSaveButton(); + } + + $tree->actions(function (Tree\Actions $actions) { + if ($actions->getRow()->extension) { + $actions->disableDelete(); + } else { + $actions->disableDelete(Admin::user()->cannot('dcat.admin.menus.destroy')); + } + $actions->disableEdit(Admin::user()->cannot('dcat.admin.menus.edit')); + + $actions->prepend(new Show()); + }); + + $tree->branch(function ($branch) { + $payload = " {$branch['title']}"; + + if (! isset($branch['children'])) { + if (url()->isValidUrl($branch['uri'])) { + $uri = $branch['uri']; + } else { + $uri = admin_base_path($branch['uri']); + } + + $payload .= "   $uri"; + } + + return $payload; + }); + }); + } +} diff --git a/app/Admin/Controllers/PermissionController.php b/app/Admin/Controllers/PermissionController.php new file mode 100644 index 00000000..b00f2aa5 --- /dev/null +++ b/app/Admin/Controllers/PermissionController.php @@ -0,0 +1,73 @@ +disableCreateButton(); + $tree->disableEditButton(); + + if (Admin::user()->cannot('dcat.admin.permissions.create')) { + $tree->disableQuickCreateButton(); + } + $tree->actions(function (Tree\Actions $actions) { + $actions->disableEdit(Admin::user()->cannot('dcat.admin.permissions.edit')); + $actions->disableDelete(Admin::user()->cannot('dcat.admin.permissions.destroy')); + }); + $tree->branch(function ($branch) { + $branchName = htmlspecialchars($branch['name']); + $branchSlug = htmlspecialchars($branch['slug']); + $payload = "
{$branchName}  [{$branchSlug}]"; + + $path = array_filter($branch['http_path']); + + if (! $path) { + return $payload.'
 '; + } + + $max = 3; + if (count($path) > $max) { + $path = array_slice($path, 0, $max); + array_push($path, '...'); + } + + $method = $branch['http_method'] ?: []; + + $path = collect($path)->map(function ($path) use (&$method) { + if (Str::contains($path, ':')) { + [$me, $path] = explode(':', $path); + + $method = array_merge($method, explode(',', $me)); + } + if ($path !== '...' && ! empty(config('admin.route.prefix')) && ! Str::contains($path, '.')) { + $path = trim(admin_base_path($path), '/'); + } + + $color = Admin::color()->primaryDarker(); + + return "$path"; + })->implode('  '); + + $method = collect($method ?: ['ANY'])->unique()->map(function ($name) { + return strtoupper($name); + })->map(function ($name) { + return "{$name}"; + })->implode(' ').' '; + + $payload .= "  $method$path"; + + return $payload; + }); + }); + } +} diff --git a/app/Admin/Controllers/RoleController.php b/app/Admin/Controllers/RoleController.php new file mode 100644 index 00000000..ab9b85be --- /dev/null +++ b/app/Admin/Controllers/RoleController.php @@ -0,0 +1,22 @@ +can('dcat.admin.roles.create')) { + $grid->disableCreateButton(false); + $grid->enableDialogCreate(); + } + // $grid-> + return $grid; + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 69507c72..5555bfcd 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -12,10 +12,16 @@ Route::group([ 'middleware' => config('admin.route.middleware'), ], function (Router $router) { $router->get('/', 'HomeController@index'); + $router->resource('adminstrators', 'AdministratorController'); + $router->resource('roles', 'RoleController'); + $router->resource('permissions', 'RoleController'); + $router->resource('menus', 'MenuController'); $router->resource('ad-addresses', 'AdAddressController')->only([ 'index', 'create', 'store', 'edit', 'update', 'destroy', ])->names('ad_addresses'); - $router->resource('ads', 'AdController'); + $router->resource('ads', 'AdController')->only([ + 'index', 'create', 'store', 'edit', 'update', 'destroy', + ])->names('ads'); }); diff --git a/database/seeders/AdminMenuSeeder.php b/database/seeders/AdminMenuSeeder.php new file mode 100644 index 00000000..fe860a18 --- /dev/null +++ b/database/seeders/AdminMenuSeeder.php @@ -0,0 +1,18 @@ + [ + 'management'=> [ 'name' => '系统管理', 'curd' => false, 'children' => [ - 'users' => [ + 'administrators' => [ 'name' => '管理员', 'curd' => true, ], diff --git a/database/seeders/AdministratorSeeder.php b/database/seeders/AdministratorSeeder.php new file mode 100644 index 00000000..1f340877 --- /dev/null +++ b/database/seeders/AdministratorSeeder.php @@ -0,0 +1,18 @@ +