Здравствуйте!
У меня есть dataGrid.
В одной из колонок у меня расположен DropDownButton. Создаю я его через ComponentRenderer:
@Supply(to = "something.contextMenu", subject = "renderer")
public Renderer<Something> somethingDataGridContextMenuRenderer() {
return new ComponentRenderer<>((Something some) -> {
DropdownButton dropdownButton = uiComponents.create(DropdownButton.class);
dropdownButton.setIcon(VaadinIcon.ELLIPSIS_DOTS_V.create());
DropdownButtonItem read = dropdownButton
.addItem("read", messages.getMessage("action/read"),
(DropdownButtonItem.ClickEvent listener) -> openDetailView(some, true));
editStart = dropdownButton
.addItem("editWithRoleNew", messages.getMessage("action/editStart"),
(DropdownButtonItem.ClickEvent listener) -> openDetailView(some, false));
DropdownButtonItem edit = dropdownButton
.addItem("edit", messages.getMessage("action/edit"),
(DropdownButtonItem.ClickEvent listener) -> openDetailView(some, false));
return dropdownButton;
});
}
Далее у меня есть метод, в котором при помощи accessManager я проверяю, что если для пользователя не установлена конкретная политика, то кнопка “Настройка перед запуском” в выпадающем списке должна стать недоступной. А также есть подписка на BeforeCloseEvent:
private void applySetupAgentBeforeStartConstraints() {
SetupAgentBeforeStartContext context = new SetupAgentBeforeStartContext();
accessManager.applyRegisteredConstraints(context);
editStart.setEnabled(context.isPermitted());
}
@Subscribe
public void onBeforeClose(final AfterCloseEvent event) {
applySetupAgentBeforeStartConstraints();
}
Но пока я лишь добился поведения, что при отсутствии нужной роли у пользователя, по нажатию на кнопку выскакивает сообщение, что доступ запрещен, но кнопку сделать недоступной так и не получилось. И кстати не уверен, что нужную подписку на событие использую.
Подскажите, как мне добиться нужного поведения?