#laravel #laravel-permission
#laravel #laravel-разрешение
Вопрос:
У меня есть проект Laravel 8 на моем локальном ПК с Windows. Я загрузил проект на свой общий веб-хостинг на Dreamhost через zip-файл и скопировал всю базу данных на удаленный хост. (Я не могу использовать команды Composer и php artisan на удаленном сервере) Я использую отдельные роли и разрешения в своем проекте.
Позже мне пришлось добавить новое разрешение ‘holiday_vacation’ в мой проект. Я создал новое разрешение с помощью команд artisan в своей локальной системе. Я считаю, что когда создается новое разрешение, оно добавляет новую запись в permissions
таблицу, а когда пользователю предоставляется доступ к определенному разрешению, запись добавляется в model_has_permissions
таблицу. Я считаю, что никакая другая таблица не изменяется во время этого процесса. Недавно созданное разрешение ‘holiday_vacation’ отлично работает в моей локальной системе.
Однако после того, как я вручную обновил удаленные таблицы (разрешения и model_has_permissions), удаленная система не может найти новое разрешение (holiday_vacation). Следующие команды в контроллере отображают сообщение об ошибке: «Нет разрешения с именем holiday_vacation
для guard web
» .
if(auth()->user()->hasPermissionTo('holiday_vacation') )
{
dd("Has access");
}
Я абсолютно уверен, что таблица разрешений имеет holiday_vacation
разрешение, поскольку я скопировал таблицы permissions и model_has_permissions из локальной базы данных в удаленную.
Поиск Google по этой проблеме говорит об очистке кэша разрешений (например, php artisan cache: забудьте spatie.permission.cache, затем php artisan cache: очистить). К сожалению, я не могу выполнять команды php artisan на моем общем хостинге.
Может кто-нибудь предложить обходной путь, пожалуйста?
Комментарии:
1. Какой драйвер кэша вы используете? (Кроме того, пора отказаться от общего хостинга.)
2. Вы можете попробовать удалить кеш, выполнив
app()[SpatiePermissionPermissionRegistrar::class]->forgetCachedPermissions();
.
Ответ №1:
комментарий @BABAK ASHRAFI сделал свое дело, за исключением того, что команду нужно было немного изменить. (Ссылка: https://spatie.be/docs/laravel-permission/v3/advanced-usage/cache )
app()->make(SpatiePermissionPermissionRegistrar::class)->forgetCachedPermissions();
Комментарии:
1. если это решило вашу проблему, отметьте ее как принятый ответ
2. К вашему сведению: если класс связан контейнером, то решение @babak-ashrafi также должно работать.