Reputation: 786
I am writing a small application using the stack Spring Boot + Spring Security + JavaFX. For Integration JavaFX with Spring Boot & Spring Security I used this source from Github: https://github.com/emorgado/javafx-springboot-springsecurity
How can I use Spring Security extras (like extras for Thymeleaf) in FXML files? For example: Thymeleaf -
<li class="nav-item" sec:authorize="hasRole('ROLE_ADMIN')">
<a class="nav-link" th:href="@{/settings}">
<p>Settings</p>
</a>
</li>
FXML -
<Menu mnemonicParsing="false" text="Settings">
<MenuItem mnemonicParsing="false" onAction="#mainSettingsAction" text="Main settings" />
</Menu>
Is there any way to use attributes like sec:authorize or tags <security>
in FXML file?
Upvotes: 0
Views: 493
Reputation: 786
Many thanks to Charles Lee for help! I provide my solution to this problem:
@FXML private MenuItem settingsMenu;
@FXML
public void initialize(URL location, ResourceBundle resources) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Doctor currentUser = (Doctor) doctorService.findDoctorByDoctorUsername(authentication.getName());
if(!currentUser.getRoles().contains(Role.ADMIN)) {
settingsMenu.getParentMenu().getItems().remove(settingsMenu);
}
}
Upvotes: 0
Reputation: 371
I think you should make your own fxml compiler like e(fx)clipse FXML compiler.
but, You can use this trick.
in .fxml
<MenuItem fx:id="menuSettings" mnemonicParsing="false" onAction="#mainSettingsAction" text="Main settings" userData="ROLE_ADMIN"/>
in the controller.
@FXML private MenuItem menuSettings;
if(menuSettings != null && menuSettings.getUserData() != null) {
if("ROLE_ADMIN".equals(menuSettings.getUserData().toString())) {
menuSettings.getParentMenu().getItems().remove(menuSettings);
}
}
Upvotes: 1