You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Если внутри MenuGroup будут вложены другие MenuGroup, то пользователь будет видеть их все, как и все MenuItem внутри них, если у него есть доступ хотя бы к одному.
return MenuRBAC::menu(
MenuGroup::make('test.1', [
MenuGroup::make('test.1.1', [
MenuItem::make('test.1.1.1', new TestResource1),
MenuItem::make('test.1.1.2', new TestResource2),
]),
MenuGroup::make('test.1.2', [
MenuItem::make('test.1.2.1', new TestResource3),
MenuItem::make('test.1.2.2', new TestResource4),
]),
])
);
Столкнулся с такой же проблемой. Но она не связана с этим модулем. Он добавляет только к объектам меню видимость через canSee. Дальше уже это делает сам moonshine. Если убрать обертку MenuRBAC::menu и самому у вложенных добавить canSee(fn() => false), то они все равно будут отображаться
Столкнулся с такой же проблемой. Но она не связана с этим модулем. Он добавляет только к объектам меню видимость через canSee. Дальше уже это делает сам moonshine. Если убрать обертку MenuRBAC::menu и самому у вложенных добавить canSee(fn() => false), то они все равно будут отображаться
Я по итогу использовал vendor patch и свою обертку moonshine-menumanager.patch
Если вам для проекта, а не пакета - адекватный вариант, учитывая релиз Moonshine 3.0, крупных изменений в 2.0 ветке ждать не стоит.
<?php
namespace App\MoonShine;
use MoonShine\Menu\MenuElement;
use MoonShine\Menu\MenuItem;
use MoonShine\MoonShineAuth;
use MoonShine\Resources\ModelResource;
use Sweet1s\MoonshineRBAC\Traits\WithRolePermissions;
class MenuRoleBased
{
/**
* This method is used to create menu items with permissions, if the user does not have permission to view the menu item, it will not be displayed
*
* @return MenuElement[]
*/
public static function menu(MenuElement ...$items): array
{
$self = new self;
foreach ($items as $item) {
$self->checkPermission($item);
}
return $items;
}
private function checkPermission(MenuElement $item): void
{
if (method_exists($item, 'items')) {
foreach ($item->items() as $item) {
$this->checkPermission($item);
}
}
if (! $item instanceof MenuItem || ! $item?->getFiller() instanceof ModelResource) {
return;
}
$resource = $item->getFiller();
$hasRolePermissionsTrait = in_array(
WithRolePermissions::class,
class_uses_recursive($resource),
true
);
if ($hasRolePermissionsTrait) {
$item->canSee(function () use ($resource) {
return $this->userHasViewAnyPermission($resource);
});
}
}
private function userHasViewAnyPermission(ModelResource $resource): bool
{
$user = MoonShineAuth::guard()->user();
foreach ($user->roles as $role) {
if ($role->isHavePermission(class_basename($resource::class), 'viewAny')) {
return true;
}
}
return false;
}
}
Здравствуйте, как мне запустить патч? У меня самогон 2 версии но не могу найти файл MenuManager, с патчами никогда не работал, не могли бы вы мне помочь?
Я попробовал запустить это: patch -p1 < moonshine-menumanager.patch
Но это не работает.
Здравствуйте, как мне запустить патч? У меня самогон 2 версии но не могу найти файл MenuManager, с патчами никогда не работал, не могли бы вы мне помочь?
Я попробовал запустить это: patch -p1 < moonshine-menumanager.patch Но это не работает.
Activity
yurizoom commentedon Dec 13, 2024
Столкнулся с такой же проблемой. Но она не связана с этим модулем. Он добавляет только к объектам меню видимость через canSee. Дальше уже это делает сам moonshine. Если убрать обертку MenuRBAC::menu и самому у вложенных добавить canSee(fn() => false), то они все равно будут отображаться
DarkVen0m commentedon Dec 16, 2024
Я по итогу использовал vendor patch и свою обертку
moonshine-menumanager.patch
Если вам для проекта, а не пакета - адекватный вариант, учитывая релиз Moonshine 3.0, крупных изменений в 2.0 ветке ждать не стоит.
LinenBen17 commentedon Feb 9, 2025
Здравствуйте, как мне запустить патч? У меня самогон 2 версии но не могу найти файл MenuManager, с патчами никогда не работал, не могли бы вы мне помочь?
Я попробовал запустить это:
patch -p1 < moonshine-menumanager.patchНо это не работает.
yurizoom commentedon Feb 9, 2025
Патчи применяются в composer.json, например:
lee-to commentedon Feb 9, 2025
Исправлено в релизе 2.23.5