Laravel-admin: problem with Permissions

Created on 8 Sep 2019  ·  3Comments  ·  Source: z-song/laravel-admin

  • Laravel Version: 5.8
  • PHP Version: 7.3
  • Laravel-admin: 1.7

Description:

i want to use permissions. read this doc:
https://laravel-admin.org/docs/#/en/permission

i got this erorr when using create() functions with Permission:
Declaration of App\Admin\Controllers\ServiceController::create() should be compatible with Encore\Admin\Controllers\AdminController::create(Encore\Admin\Layout\Content $content)

My Admin Controller:

<?php

namespace App\Admin\Controllers;

use App\Models\Service;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Auth\Permission;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;

class ServiceController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = 'خدمات';

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Service);
        $grid->disableExport();
        $grid->paginate(20);
        // $grid->column('id', __('Id'));
        $grid->column('title', __('خدمت'))->editable();
        $grid->column('description', __('توضیح خدمت'))->editable();
        $grid->column('price', __('قیمت به تومان'))->editable();
        // $grid->column('created_at', __('Created at'));
        // $grid->column('updated_at', __('Updated at'));
        // $grid->column('deleted_at', __('Deleted at'));

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Service::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('title', __('Title'));
        $show->field('description', __('Description'));
        $show->field('price', __('Price'));
        $show->field('created_at', __('Created at'));
        $show->field('updated_at', __('Updated at'));
        $show->field('deleted_at', __('Deleted at'));

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Service);

        $form->text('title', __('نام خدمت'))->placeholder('نام کوتاه و واضح')->required();
        $form->textarea('description', __('توضیح خدمت'))->placeholder('این خدمت چه کمکی به مشتری میکند؟')->required();
        $form->number('price', __('دستمزد خدمت'))->placeholder('به تومان')->required();

        return $form;
    }

    public function create()
    {
        Permission::check('agency');
    }

}
wontfix

Most helpful comment

@amirbagh75 Hello!
We inherit from the standard class Controller (non-AdminController) in the example, so in your case you need to do this:

...
public function create(Encore\Admin\Layout\Content $content)
{
    Permission::check('agency');
    return parent::create($content);
}

...

or better like this:

...
/**
  * Make a form builder.
  *
  * @return Form
  */
protected function form()
{
    $form = new Form(new Service);

    if ($form->isCreating()) { // Since v1.7.6
        Permission::check('agency');
    }

    $form->text('title', __('نام خدمت'))->placeholder('نام کوتاه و واضح')->required();
    $form->textarea('description', __('توضیح خدمت'))->placeholder('این خدمت چه کمکی به مشتری میکند؟')->required();
    $form->number('price', __('دستمزد خدمت'))->placeholder('به تومان')->required();

    return $form;
 }
...

All 3 comments

@amirbagh75 Hello!
We inherit from the standard class Controller (non-AdminController) in the example, so in your case you need to do this:

...
public function create(Encore\Admin\Layout\Content $content)
{
    Permission::check('agency');
    return parent::create($content);
}

...

or better like this:

...
/**
  * Make a form builder.
  *
  * @return Form
  */
protected function form()
{
    $form = new Form(new Service);

    if ($form->isCreating()) { // Since v1.7.6
        Permission::check('agency');
    }

    $form->text('title', __('نام خدمت'))->placeholder('نام کوتاه و واضح')->required();
    $form->textarea('description', __('توضیح خدمت'))->placeholder('این خدمت چه کمکی به مشتری میکند؟')->required();
    $form->number('price', __('دستمزد خدمت'))->placeholder('به تومان')->required();

    return $form;
 }
...

@amirbagh75 Hello!
We inherit from the standard class Controller (non-AdminController) in the example, so in your case you need to do this:

...
public function create(Encore\Admin\Layout\Content $content)
{
    Permission::check('agency');
    return parent::create($content);
}

...

or better like this:

...
/**
  * Make a form builder.
  *
  * @return Form
  */
protected function form()
{
    $form = new Form(new Service);

    if ($form->isCreating()) { // Since v1.7.6
        Permission::check('agency');
    }

    $form->text('title', __('نام خدمت'))->placeholder('نام کوتاه و واضح')->required();
    $form->textarea('description', __('توضیح خدمت'))->placeholder('این خدمت چه کمکی به مشتری میکند؟')->required();
    $form->number('price', __('دستمزد خدمت'))->placeholder('به تومان')->required();

    return $form;
 }
...

if ($form->isCreating()) { // Since v1.7.6
$form->text('title', __('نام خدمت'))->placeholder('نام کوتاه و واضح')->required();
$form->textarea('description', __('توضیح خدمت'))->placeholder('این خدمت چه کمکی به مشتری میکند؟')->required();
$form->number('price', __('دستمزد خدمت'))->placeholder('به تومان')->required();
}

why this code not working ? and didnt save anything ?

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

qcol picture qcol  ·  3Comments

fokoz picture fokoz  ·  3Comments

MarKco picture MarKco  ·  3Comments

xiaalngf picture xiaalngf  ·  3Comments

joernroeder picture joernroeder  ·  3Comments