laravel nova скрыть кнопку редактирования на странице индекса

Как отключить кнопку редактирования / удаления на странице индекса nova и по-прежнему разрешать подробную страницу, если я создам политику, которая отключит операцию повсюду, я хочу разрешить редактирование и удаление подробной страницы, но просто хочу удалить эту кнопку из индекса,

делает что-то вроде

 public function update(User $user, Customer $customer)
    {
        if ( request()->route()->getName('route-name') ) {
            return false;
        }
    }

правильный способ или есть способ лучше?


person Prafulla Kumar Sahu    schedule 19.06.2019    source источник


Ответы (7)


У меня был ресурс Leads, и мне нужно было скрыть на нем кнопку редактирования. В моем CSS я сделал следующее - см. Здесь, как добавить свой собственный CSS. в Нову.

Используя slug моего ресурса Leads, я могу ссылаться на атрибут dusk по slug и разделу ресурсов:

div[dusk="leads-index-component"] table td.td-fit span:last-of-type {
    display: none !important;
}

Итак, часть, которую вы бы изменили, это leads-index-component часть, которая будет {your-resource-slug}-index-component

Кроме того, просто удалите часть :last-of-type, если вы хотите скрыть и вид, и значок редактирования:

введите здесь описание изображения

Для справки: я использую пакет Button Field, чтобы добавить настраиваемую кнопку для перенаправления на мой собственный кастомный инструмент для управления этим ресурсом.

Я не связан ни с одной из предоставленных ссылок.

person Grant    schedule 27.11.2019

Вы можете определить настраиваемые действия и установить видимость действий в соответствии с вашими требованиями.

  1. Создать новый класс действия:
# To generate the action class
php artisan nova:action DeleteUserData --destructive
  1. Установите Видимость действия:
/**
 * Indicates if this action is only available on the resource index view.
 *
 * @var bool
 */
public $onlyOnIndex = false;

/**
 * Indicates if this action is only available on the resource detail view.
 *
 * @var bool
 */
public $onlyOnDetail = true;

Источник: https://nova.laravel.com/docs/1.0/actions/defining-actions.html#action-visibility

person Vikash Pathak    schedule 19.06.2019
comment
Спасибо за ответ, но я ожидал, что мы сможем установить какое-то свойство и сделать это. - person Prafulla Kumar Sahu; 20.06.2019
comment
Нет никаких условий для action элементов, но вы можете сделать это для fields :) - person Vikash Pathak; 20.06.2019
comment
хорошо, спасибо, что указали на это. В Nova 2.0 тоже нет такой опции или вы говорите только о 1.0? - person Prafulla Kumar Sahu; 20.06.2019
comment
Он есть и в версии 2.0 nova.laravel.com/ документы / 2.0 / действия / - person Vikash Pathak; 20.06.2019
comment
Я думаю, вы неправильно ответили на мой последний вопрос, я тоже задавал в 2.0, мы не можем отключить / включить видимость при редактировании / удалении? - person Prafulla Kumar Sahu; 20.06.2019
comment
Давайте продолжим это обсуждение в чате. - person Prafulla Kumar Sahu; 20.06.2019
comment
Да ... в nova 2.0 вы не можете установить видимость для предопределенных действий, таких как ваши требования. - person Vikash Pathak; 20.06.2019
comment
хорошо, спасибо, они где-нибудь упоминали об этом или вы нашли это во время работы? в любом случае отличный момент для документации, если не упомянуто. - person Prafulla Kumar Sahu; 20.06.2019
comment
Проверяю обновление документации. github.com/laravel/nova- документы / blob / develop / 2.0 / actions - person Vikash Pathak; 20.06.2019
comment
Вы можете сделать это, создав политику и вернув false для update() и добавив authorizable() для класса ресурсов. - person Prafulla Kumar Sahu; 05.07.2019

Если вы хотите отключить любую кнопку строки на странице индекса, создайте политику для ресурса и верните false для соответствующей функции в моем случае update(),

все остальные возвращают true и добавляют политику AuthServiceProvider.php add

protected $policies = [
    Post::class => PostPolicy::class,
];

и в классе ресурсов

public static function authorizable()
{
    return true;
}

это отключит эту кнопку.

person Prafulla Kumar Sahu    schedule 05.07.2019
comment
Он скроет кнопку, но также отключит любые пользовательские операции, в данном случае в соответствии с политикой авторизации edit. Пользователь спросил не об этом. Пользователь попросил сохранить политику, но скрыть только кнопку. - person Max; 05.03.2020
comment
@Max, пожалуйста, проверьте вопрос, он упоминается об отключении на странице индекса и разрешении на странице сведений. Скрытие - это не то же самое, что отключение. - person Prafulla Kumar Sahu; 05.03.2020
comment
Я проверил вопрос. Вы должны проверить вопрос. Он хочет удалить кнопки из индекса, не отключая операции. Ваш ответ не сработает, потому что он отключит «редактирование» везде, даже в подробном представлении, и разрешит все другие операции. - person Max; 05.03.2020
comment
@Max Я тот человек, который задал вопрос, поэтому я очень четко понимаю требование. Надеюсь, ваш ответ окажется полезным для других и для вас самих. Мой ответ был именно тем, что я хотел, прежде чем опубликовать этот вопрос. - person Prafulla Kumar Sahu; 05.03.2020
comment
@Max 1st, позвольте мне вас прояснить, поскольку этот CSS никогда не является решением, в классе политики return false в методе индекса и true в методе show отключит кнопки на странице индекса и разрешит его на странице сведений. Кстати у меня более 6000 репутации, значит, что-то есть, наверное. - person Prafulla Kumar Sahu; 05.03.2020
comment
Нет метода index или show. Даже в вашем ответе не говорится о методе индексации или показа. - person Max; 05.03.2020
comment
@max Я не думаю, что людям, которые работают в Laravel, здесь понадобится класс Policy, вместо этого они будут просматривать документацию, чтобы узнать подробности политик, и, если они знают, этого ответа должно быть достаточно, чтобы понять, как это работает с ресурсом Nova. - person Prafulla Kumar Sahu; 05.03.2020

Есть альтернатива, просто используя css.

    div[dusk$="-index-component"] table td.td-fit {
     display: none !important;
    }
person João Santos    schedule 18.10.2019

Я знаю, что эта ветка немного устарела, но вы также можете переопределить метод authorizedToUpdate из своего ресурса nova следующим образом:

public function authorizedToUpdate(Request $request): bool
{
    return "nova-api/{resource}" != $request->route()->uri();
}

Это также работает для authorizedToView и authorizedToDelete.

person Adam Hutchison    schedule 23.02.2021

Кажется, существует только решение CSS, например:

/* Details page */
div[dusk="users-detail-component"] button[dusk="open-delete-modal-button"],
/* Index page next to each row */
div[dusk="users-index-component"] button[dusk$="-delete-button"],
/* Index page after checking boxes */
div[dusk="users-index-component"] div[dusk="delete-menu"] {
  display: none !important;
}

Введите название ваших компонентов, в данном случае это users-.

Другие решения, включающие авторизацию и политики, будут не только скрывать кнопку, но и полностью отключать действие, поэтому вы не сможете запустить его с настраиваемым действием, если это необходимо.

person Max    schedule 04.03.2020

Я хотел сделать что-то подобное. Я не хотел, чтобы кнопка редактирования отображалась на странице индекса, но я хотел, чтобы действия выполнялись (и обновлялись ресурсы). Поэтому я использовал приведенный ниже код:

use Laravel\Nova\Http\Requests\ActionRequest;

...

public function authorizedToUpdate(Request $request)
{
    return $request instanceof ActionRequest;
}
person istavros    schedule 29.03.2021