title(trans('admin.roles')) ->description(trans('admin.list')) ->body($this->grid()); } /** * Show interface. * * @param mixed $id * @param Content $content * * @return Content */ public function show($id, Content $content) { return $content ->title(trans('admin.roles')) ->description(trans('admin.detail')) ->body($this->detail($id)); } /** * Edit interface. * * @param mixed $id * @param Content $content * * @return Content */ public function edit($id, Content $content) { return $content ->title(trans('admin.roles')) ->description(trans('admin.edit')) ->body($this->form()->edit($id)); } /** * Create interface. * * @param Content $content * * @return Content */ public function create(Content $content) { return $content ->title(trans('admin.roles')) ->description(trans('admin.create')) ->body($this->form()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { if ($mini = request(SimpleGrid::QUERY_NAME)) { $grid = new SimpleGrid(new Role()); } else { $grid = new Grid(new Role()); } $grid->id('ID')->bold()->sortable(); $grid->slug->label('primary'); $grid->name; if (! $mini) { $grid->created_at; $grid->updated_at->sortable(); } $grid->disableBatchDelete(); $grid->disableEditButton(); $grid->showQuickEditButton(); $grid->disableFilterButton(); $grid->quickSearch(['id', 'name', 'slug']); $grid->createMode(Grid::CREATE_MODE_DIALOG); $grid->actions(function (Grid\Displayers\Actions $actions) { $roleModel = config('admin.database.roles_model'); if ($roleModel::isAdministrator($actions->row->slug)) { $actions->disableDelete(); } }); return $grid; } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { return Show::make(new Role('permissions'), function (Show $show) use ($id) { $show->id; $show->slug; $show->name; $show->permissions->width(12)->as(function ($permission) { return collect($permission)->pluck('name'); })->label('primary'); $show->divider(); $show->created_at; $show->updated_at; if ($id == RoleModel::ADMINISTRATOR_ID) { $show->disableDeleteButton(); } })->key($id); } /** * Make a form builder. * * @return Form */ public function form() { return Form::make(new Role('permissions'), function (Form $form) { $roleTable = config('admin.database.roles_table'); $connection = config('admin.database.connection'); $id = $form->key(); $form->display('id', 'ID'); $form->text('slug', trans('admin.slug')) ->required() ->creationRules(['required', "unique:{$connection}.{$roleTable}"]) ->updateRules(['required', "unique:{$connection}.{$roleTable},slug,$id"]); $form->text('name', trans('admin.name'))->required(); $form->tree('permissions') ->nodes(function () { $permissionModel = config('admin.database.permissions_model'); $permissionModel = new $permissionModel(); return $permissionModel->allNodes(); }) ->customFormat(function ($v) { if (! $v) { return []; } return array_column($v, 'id'); }); $form->display('created_at', trans('admin.created_at')); $form->display('updated_at', trans('admin.updated_at')); if ($id == RoleModel::ADMINISTRATOR_ID) { $form->disableDeleteButton(); } }); } /** * Remove the specified resource from storage. * * @param int $id * * @return \Illuminate\Http\Response */ public function destroy($id) { if (in_array(RoleModel::ADMINISTRATOR_ID, Helper::array($id))) { Permission::error(); } return $this->delete($id); } }