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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
8 454
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

  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

Спасибо за ваш ответ, но я ожидал, что мы сможем установить какое-то свойство и сделать это.

Prafulla Kumar Sahu 20.06.2019 14:13

Для предметов action нет никаких условий, но вы можете сделать это для fields :)

Vikash Pathak 20.06.2019 14:14

хорошо, спасибо, что указали на это. В Nova 2.0 тоже нет такой опции или вы про 1.0 только?

Prafulla Kumar Sahu 20.06.2019 14:16

Он есть и для версии 2.0 nova.laravel.com/docs/2.0/actions/…

Vikash Pathak 20.06.2019 14:17

Я думаю, вы неправильно поняли мой последний вопрос, я спрашивал в 2.0, мы тоже не можем отключить / включить видимость при редактировании / удалении?

Prafulla Kumar Sahu 20.06.2019 14:19

Давайте продолжить обсуждение в чате.

Prafulla Kumar Sahu 20.06.2019 14:22

Да... в nova 2.0 вы не можете установить видимость для предопределенных действий, таких как ваши требования.

Vikash Pathak 20.06.2019 14:23

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

Prafulla Kumar Sahu 20.06.2019 14:24

Я проверяю обновление документации. github.com/laravel/nova-docs/blob/develop/2.0/actions

Vikash Pathak 20.06.2019 14:26

Вы можете сделать это, создав политику и вернув false для update() и добавив authorizable() для класса ресурсов.

Prafulla Kumar Sahu 05.07.2019 15:39
Ответ принят как подходящий

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

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

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

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

public static function authorizable()
{
    return true;
}

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

Он скроет кнопку, но также отключит любые пользовательские операции, в данном случае в соответствии с политикой авторизации edit. Это не то, что спросил пользователь. Пользователь попросил сохранить политику, но скрыть только кнопку.

Max 05.03.2020 00:30

@Max, пожалуйста, проверьте вопрос, упоминается об отключении на индексной странице и разрешении на странице сведений. Скрытие — это не то же самое, что отключение.

Prafulla Kumar Sahu 05.03.2020 01:42

Я проверил вопрос. Вы должны проверить вопрос. Он хочет удалить кнопки из индекса, не отключая операции. Ваш ответ не будет работать, потому что он отключит «редактирование» везде, даже в подробном представлении, и разрешит все другие операции.

Max 05.03.2020 05:14

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

Prafulla Kumar Sahu 05.03.2020 07:26

@Max Во-первых, позвольте мне прояснить вас, потому что этот CSS никогда не является решением, в классе политики возвращается false в методе index и true в методе show, отключает кнопки на странице индекса и разрешает его на странице сведений. Кстати у меня больше 6000 репутации, значит что-то есть, наверное.

Prafulla Kumar Sahu 05.03.2020 13:31

Нет ни метода index, ни метода show. Даже в вашем ответе не говорится о методе index или show.

Max 05.03.2020 18:04

@max Я не думаю, что людям, работающим в Laravel, понадобится здесь класс Policy, вместо этого они будут просматривать документацию, чтобы узнать подробности политик, и если они знают, этого ответа должно быть достаточно, чтобы понять, как это работает с ресурсом Nova.

Prafulla Kumar Sahu 05.03.2020 18:07

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

    div[dusk$ = "-index-component"] table td.td-fit {
     display: none !important;
    }

Я хочу скрыть только кнопку просмотра, как мне это сделать?

Christopher Kikoti 04.03.2022 09:46

У меня был ресурс Лидов и мне нужно было скрыть на нем кнопку редактирования. Я сделал следующее в своем CSS — см. здесь, как добавьте свой собственный CSS в Nova.

Используя слаг моего ресурса Leads, я могу ссылаться на атрибут «сумерки» по слагу и разделу ресурса:

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, если вы хотите скрыть и представление, и значок редактирования:

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

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

Кажется, существует только решение 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-.

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

Это то, что я искал, но я попытался изменить -удалить- на -просмотреть- и это не работает? Как я могу удалить только кнопку просмотра вместо кнопки удаления? Спасибо

Christopher Kikoti 04.03.2022 09:35

@ChristopherKikoti Это зависит от того, какую модель вы используете, вам нужно заменить users-index-component, попробуйте проверить элемент, чтобы узнать, как он называется.

Max 04.03.2022 13:28

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

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

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

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

use Laravel\Nova\Http\Requests\ActionRequest;

...

public function authorizedToUpdate(Request $request)
{
    return $request instanceof ActionRequest;
}

Другие вопросы по теме