From 9663b4c0b55e787a8bd37627f5c180b7e0353605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20S=C3=A4ume?= Date: Tue, 21 May 2024 19:17:48 +0200 Subject: [PATCH] #8: Implement User Permissions System Base and usage with Tabs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dominik Säume --- db/nursingHome.db | Bin 57344 -> 57344 bytes src/main/java/de/hitec/nhplus/Main.java | 12 +- .../de/hitec/nhplus/fixtures/Fixtures.java | 2 +- .../hitec/nhplus/fixtures/NurseFixture.java | 6 + .../de/hitec/nhplus/fixtures/UserFixture.java | 36 ++- .../hitec/nhplus/login/LoginController.java | 1 - .../de/hitec/nhplus/login/Permissions.java | 8 + src/main/java/de/hitec/nhplus/login/User.java | 37 +-- .../hitec/nhplus/login/database/UserDao.java | 10 +- .../nhplus/main/MainWindowController.java | 251 ++++-------------- .../de/hitec/nhplus/utils/tab/TabManager.java | 82 ++++++ .../de/hitec/nhplus/utils/tab/TabStruct.java | 13 + .../de/hitec/nhplus/main/MainWindowView.fxml | 30 +-- 13 files changed, 228 insertions(+), 260 deletions(-) create mode 100644 src/main/java/de/hitec/nhplus/login/Permissions.java create mode 100644 src/main/java/de/hitec/nhplus/utils/tab/TabManager.java create mode 100644 src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java diff --git a/db/nursingHome.db b/db/nursingHome.db index 87428bb3d43c31c3f5bde0589499552b4549ff9d..b89b1465940bb9f8aa1e08321a549d20da8681fd 100644 GIT binary patch delta 1455 zcmYjR4Nz276n=N#-S@k1?{3Swg9|JRCaWVdlXIb&{1MpJ5q-AhcM*4;ZW(_nZw|$NTC8>QzEebrafV#z*g>4$yCKXDBE8EfuT& z6J8bCRo$OerK|XL5z-vmWU+vEOM*Y}*+4#n#>!@)yqadAL`bvhn*~5llxE62JppnP zrF5*=6B@*5d)$P$;Cx3 zAIqP90$CtUl|NwZfR=w|cgIVqw8?4(>+<~0Wd$yeE62Uu>36U6KGmq8%q0RSX{5B^ zL$wA#u~eENm(oK}`w(0YcJbG+sX&@7N1%SWS-a2(NR!zN%Cr4WYBd$AS1fo3dk03G zBaluzN;o9U*BsO2@^|`kK1L7y2h}n=)Wq(sitW zq=-nItHkB=x_one{Zppa4TVRlN1Bx)r^_3SOTvcy)gg) delta 1022 zcmYjQdu&rx7{BM9_S|>Rty`(t?ba>G#>|jzu0&>xTOtt{C}9J`OKDuE+q$;i-fjY6 z-KB9PW+A|tfc|08N(+#H4ZuB2Jo|?O zkQ1&(50mfJG?0GH2%#NlzH>A34jEEzA5_tTDF(Y;rOFv)qdX=@q&aC!dQqIReCnXM zpe7Kk4Auk!b#+@skpV)9*XuSRnJ#FM1%U#90%hh3@{*R4mheJOQAWPjo|5BSPEc;T z5Bi#=ZHV%AfVPY1z6~<(6dA$JxX`R8)}#Pg%I~!Tn@~YmS893hROAs)D5d z)y-MQb~Wo*r}8W=XYdEO+$t$9#Hm&mF`hN1+#b?fj*NBjeddkxo2S}b#fP+SPsN6= z3Tx{2Y-F9pyzlCKujL3m28Ur^-62z^rA#6<>{1qoj=sT z)eo*@EB;)SY2JN(pz`D|%by>OKIr>>(mir+)4{> z&O { diff --git a/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java b/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java index 0ea398b..5897378 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java +++ b/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java @@ -46,7 +46,7 @@ public class Fixtures { medicationFixture.setupTable(connection); medicationFixture.load(); - UserFixture userFixture = new UserFixture(); + UserFixture userFixture = new UserFixture(nursesByName); userFixture.dropTable(connection); userFixture.setupTable(connection); userFixture.load(); diff --git a/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java b/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java index c5d0c0f..3da00ed 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java +++ b/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java @@ -54,6 +54,12 @@ public class NurseFixture implements Fixture { true )); + nurses.add(new Nurse( + "Maria", + "Höller", + "666" + )); + NurseDao dao = DaoFactory.getInstance().createNurseDAO(); for (Nurse nurse : nurses) { dao.create(nurse); diff --git a/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java b/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java index 2fff14f..7b3550f 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java +++ b/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java @@ -2,9 +2,10 @@ package de.hitec.nhplus.fixtures; import de.hitec.nhplus.Main; import de.hitec.nhplus.datastorage.DaoFactory; +import de.hitec.nhplus.login.Permissions; import de.hitec.nhplus.login.User; import de.hitec.nhplus.login.database.UserDao; -import de.hitec.nhplus.medication.Medication; +import de.hitec.nhplus.nurse.Nurse; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -16,6 +17,13 @@ public class UserFixture implements Fixture{ private static final String SCHEMA = "/de/hitec/nhplus/login/database/User.sql"; private static final String PERMISSION_SCHEMA = "/de/hitec/nhplus/login/database/UserPermission.sql"; private static final String TO_NURSE_SCHEMA = "/de/hitec/nhplus/login/database/UserToNurse.sql"; + + private final Map nursesByName; + + public UserFixture(Map nursesByName) { + this.nursesByName = nursesByName; + } + @Override public void dropTable(Connection connection) throws SQLException { connection.createStatement().execute("DROP TABLE IF EXISTS user"); @@ -54,9 +62,7 @@ public class UserFixture implements Fixture{ User udo = new User( "udo", - null, - null, - Integer.parseInt("00000001", 2), + Permissions.OWNER, null ); udo.setPassword("uD0_187!"); @@ -64,14 +70,28 @@ public class UserFixture implements Fixture{ User maria = new User( "maria", - null, - null, - 0, - null + Permissions.NURSE, + nursesByName.get("Maria") ); maria.setPassword("H!mm3lf4hrt"); users.add(maria); + User werner = new User( + "werner", + Permissions.MANAGEMENT, + null + ); + werner.setPassword("TurboSchraube42!"); + users.add(werner); + + User fullPermissionsTestUser = new User( + "test", + -1, + null + ); + fullPermissionsTestUser.setPassword(""); + users.add(fullPermissionsTestUser); + UserDao dao = DaoFactory.getInstance().createUserDAO(); Map usersByUsername = new HashMap<>(); for (User user : users){ diff --git a/src/main/java/de/hitec/nhplus/login/LoginController.java b/src/main/java/de/hitec/nhplus/login/LoginController.java index dca1cd7..bec7101 100644 --- a/src/main/java/de/hitec/nhplus/login/LoginController.java +++ b/src/main/java/de/hitec/nhplus/login/LoginController.java @@ -88,6 +88,5 @@ public class LoginController { } catch (SQLException | NoSuchAlgorithmException exception) { exception.printStackTrace(); } - } } diff --git a/src/main/java/de/hitec/nhplus/login/Permissions.java b/src/main/java/de/hitec/nhplus/login/Permissions.java new file mode 100644 index 0000000..8420986 --- /dev/null +++ b/src/main/java/de/hitec/nhplus/login/Permissions.java @@ -0,0 +1,8 @@ +package de.hitec.nhplus.login; + +public class Permissions { + public final static int EVERYBODY = 0b0; + public final static int NURSE = 0b1; + public final static int MANAGEMENT = 0b10; + public final static int OWNER = 0b100; +} diff --git a/src/main/java/de/hitec/nhplus/login/User.java b/src/main/java/de/hitec/nhplus/login/User.java index 0621b9d..50e604f 100644 --- a/src/main/java/de/hitec/nhplus/login/User.java +++ b/src/main/java/de/hitec/nhplus/login/User.java @@ -9,6 +9,7 @@ import java.security.SecureRandom; public class User { + private int id; private String username; private byte[] passwordSalt; @@ -34,30 +35,13 @@ public class User { public User( String username, - byte[] passwordSalt, - byte[] passwordHash, int permissions, Nurse nurse ) { this.username = username; - this.passwordSalt = passwordSalt; - this.passwordHash = passwordHash; this.permissions = permissions; this.nurse = nurse; } - - public int getId() { - return id; - } - - public byte[] getPasswordSalt() { - return passwordSalt; - } - - public byte[] getPasswordHash() { - return passwordHash; - } - public void setPassword(String password) { try { SecureRandom random = new SecureRandom(); @@ -72,6 +56,25 @@ public class User { } } + public boolean hasNursePermissions(){ + return (permissions & Permissions.NURSE) != 0; + } + public boolean hasAdminPermissions(){ + return (permissions & Permissions.MANAGEMENT) != 0; + } + + public int getId() { + return id; + } + + public byte[] getPasswordSalt() { + return passwordSalt; + } + + public byte[] getPasswordHash() { + return passwordHash; + } + public String getUsername() { return username; } diff --git a/src/main/java/de/hitec/nhplus/login/database/UserDao.java b/src/main/java/de/hitec/nhplus/login/database/UserDao.java index 8807ca1..915ec08 100644 --- a/src/main/java/de/hitec/nhplus/login/database/UserDao.java +++ b/src/main/java/de/hitec/nhplus/login/database/UserDao.java @@ -86,7 +86,7 @@ public class UserDao implements Dao { statement.setBytes(3, user.getPasswordHash()); statement.execute(); - ResultSet generatedKeys = connection.createStatement().executeQuery("SELECT id FROM user"); + ResultSet generatedKeys = connection.createStatement().executeQuery("SELECT last_insert_rowid()"); connection.commit(); //Finish SQL Transaction connection.setAutoCommit(true); //Switch back Mode @@ -112,13 +112,11 @@ public class UserDao implements Dao { INSERT INTO user__nurse (userId, nurseId) VALUES (?, ?); - - """; PreparedStatement nurseStatement = this.connection.prepareStatement(nurseSQL); - permissionStatement.setInt(1, newId); - permissionStatement.setInt(2, user.getNurse().getId()); - permissionStatement.execute(); + nurseStatement.setInt(1, newId); + nurseStatement.setInt(2, user.getNurse().getId()); + nurseStatement.execute(); } @Override diff --git a/src/main/java/de/hitec/nhplus/main/MainWindowController.java b/src/main/java/de/hitec/nhplus/main/MainWindowController.java index 5b7b4e4..aa00e93 100644 --- a/src/main/java/de/hitec/nhplus/main/MainWindowController.java +++ b/src/main/java/de/hitec/nhplus/main/MainWindowController.java @@ -1,20 +1,15 @@ package de.hitec.nhplus.main; -import de.hitec.nhplus.Main; -import de.hitec.nhplus.nurse.Nurse; +import de.hitec.nhplus.login.Permissions; +import de.hitec.nhplus.login.User; +import de.hitec.nhplus.utils.tab.TabManager; +import de.hitec.nhplus.utils.tab.TabStruct; +import javafx.event.Event; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.control.SelectionModel; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.BorderPane; -import de.hitec.nhplus.treatment.Treatment; -import de.hitec.nhplus.medication.Medication; -import de.hitec.nhplus.patient.Patient; -import java.io.IOException; -import java.util.Objects; +import java.util.List; /** * Controller for the main window of the application, which holds all tabs. @@ -26,199 +21,65 @@ import java.util.Objects; */ public class MainWindowController { @FXML - private TabPane mainTabPane; - @FXML - private AnchorPane patientPage; - @FXML - private Tab patientTab; - @FXML - private AnchorPane activeTreatmentPage; - @FXML - private Tab treatmentTab; - @FXML - private TabPane treatmentTabPane; - @FXML - private Tab activeTreatmentTab; - @FXML - private AnchorPane lockedTreatmentPage; - @FXML - private Tab lockedTreatmentTab; - @FXML - private Tab nurseTab; - @FXML - private TabPane nurseTabPane; - @FXML - private AnchorPane activeNursePage; - @FXML - private Tab activeNurseTab; - @FXML - private AnchorPane lockedNursePage; - @FXML - private Tab lockedNurseTab; - @FXML - private AnchorPane medicationPage; - @FXML - private Tab medicationTab; + public TabPane mainTabPane; + + private User user; + private TabManager tabManager; /** - * Initialization method that is called after the binding of all the fields. + * JavaFX Initialization method that is called after the binding of all the fields. + * + * @param user The logged in {@link User}. */ @FXML - public void initialize() { - loadPatientPage(); - mainTabPane.getSelectionModel().select(patientTab); - - patientTab.setOnSelectionChanged(event -> loadPatientPage()); - medicationTab.setOnSelectionChanged(event -> loadMedicationPage()); - - - nurseTab.setOnSelectionChanged(event -> loadNursePage()); - nurseTabPane.getSelectionModel().select(activeNurseTab); - - activeNurseTab.setOnSelectionChanged(event -> loadActiveNursePage()); - lockedNurseTab.setOnSelectionChanged(event -> loadLockedNursePage()); - - treatmentTab.setOnSelectionChanged(event -> loadTreatmentPage()); - treatmentTabPane.getSelectionModel().select(activeTreatmentTab); - - activeTreatmentTab.setOnSelectionChanged(event -> loadActiveTreatmentPage()); - lockedTreatmentTab.setOnSelectionChanged(event -> loadLockedTreatmentPage()); - + public void initialize(User user) { + this.user = user; + this.tabManager = new TabManager(user); + setupTabs(); } /** - * Loads the {@link Patient} page into its tab. + * Sets up all Tabs Accessible, with help of the {@link TabManager}. */ - private void loadPatientPage() { - try { - BorderPane patientsPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/patient/AllPatientView.fxml")) - ); - patientPage.getChildren().setAll(patientsPane); - AnchorPane.setTopAnchor(patientsPane, 0d); - AnchorPane.setBottomAnchor(patientsPane, 0d); - AnchorPane.setLeftAnchor(patientsPane, 0d); - AnchorPane.setRightAnchor(patientsPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } + private void setupTabs() { + tabManager.setupTab(mainTabPane, new TabStruct( + "Patienten", + "/de/hitec/nhplus/patient/AllPatientView.fxml", + Permissions.NURSE + )); + tabManager.setupSubTabPane(mainTabPane, "Behandlungen", Permissions.NURSE, List.of( + new TabStruct( + "Behandlungen", + "/de/hitec/nhplus/treatment/AllTreatmentView.fxml", + Permissions.NURSE + ), + new TabStruct( + "Gesperrte Behandlungen", + "/de/hitec/nhplus/treatment/LockedTreatmentView.fxml", + Permissions.NURSE + ) + )); + tabManager.setupSubTabPane(mainTabPane, "Pfleger", Permissions.EVERYBODY, List.of( + new TabStruct( + "Pfleger", + "/de/hitec/nhplus/nurse/AllNurseView.fxml", + Permissions.NURSE | Permissions.MANAGEMENT + ), + new TabStruct( + "Gesperrte Pfleger", + "/de/hitec/nhplus/nurse/LockedNurseView.fxml", + Permissions.MANAGEMENT | Permissions.OWNER + ) + )); + tabManager.setupTab(mainTabPane, new TabStruct( + "Medikamente", + "/de/hitec/nhplus/medication/AllMedicationView.fxml", + Permissions.MANAGEMENT + )); - /** - * Loads the {@link Treatment } tab. - */ - private void loadTreatmentPage() { - SelectionModel selectionModel = treatmentTabPane.getSelectionModel(); - Tab selectedTab = selectionModel.getSelectedItem(); - if (selectedTab == activeTreatmentTab) { - loadActiveTreatmentPage(); - } - if (selectedTab == lockedTreatmentTab) { - loadLockedTreatmentPage(); - } - } - /** - * Loads the active {@link Treatment} page into its tab. - */ - private void loadActiveTreatmentPage() { - try { - BorderPane activeTreatmentPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml")) - ); - activeTreatmentPage.getChildren().setAll(activeTreatmentPane); - AnchorPane.setTopAnchor(activeTreatmentPane, 0d); - AnchorPane.setBottomAnchor(activeTreatmentPane, 0d); - AnchorPane.setLeftAnchor(activeTreatmentPane, 0d); - AnchorPane.setRightAnchor(activeTreatmentPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the locked {@link Treatment} page into its tab. - */ - private void loadLockedTreatmentPage() { - try { - BorderPane treatmentsPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/LockedTreatmentView.fxml")) - ); - lockedTreatmentPage.getChildren().setAll(treatmentsPane); - AnchorPane.setTopAnchor(treatmentsPane, 0d); - AnchorPane.setBottomAnchor(treatmentsPane, 0d); - AnchorPane.setLeftAnchor(treatmentsPane, 0d); - AnchorPane.setRightAnchor(treatmentsPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the {@link Nurse} page into its tab. - */ - private void loadNursePage() { - SelectionModel selectionModel = nurseTabPane.getSelectionModel(); - Tab selectedTab = selectionModel.getSelectedItem(); - if (selectedTab == activeNurseTab) { - loadActiveNursePage(); - } - if (selectedTab == lockedNurseTab) { - loadLockedNursePage(); - } - } - - /** - * Loads the active {@link Nurse} page into its tab. - */ - private void loadActiveNursePage() { - try { - BorderPane activeNursePane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/nurse/AllNurseView.fxml")) - ); - activeNursePage.getChildren().setAll(activeNursePane); - AnchorPane.setTopAnchor(activeNursePane, 0d); - AnchorPane.setBottomAnchor(activeNursePane, 0d); - AnchorPane.setLeftAnchor(activeNursePane, 0d); - AnchorPane.setRightAnchor(activeNursePane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the locked {@link Nurse} page into its tab. - */ - private void loadLockedNursePage() { - try { - BorderPane lockedNursePane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/nurse/LockedNurseView.fxml")) - ); - lockedNursePage.getChildren().setAll(lockedNursePane); - AnchorPane.setTopAnchor(lockedNursePane, 0d); - AnchorPane.setBottomAnchor(lockedNursePane, 0d); - AnchorPane.setLeftAnchor(lockedNursePane, 0d); - AnchorPane.setRightAnchor(lockedNursePane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the {@link Medication} page into its tab. - */ - private void loadMedicationPage() { - try { - BorderPane medicationPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/medication/AllMedicationView.fxml")) - ); - medicationPage.getChildren().setAll(medicationPane); - AnchorPane.setTopAnchor(medicationPane, 0d); - AnchorPane.setBottomAnchor(medicationPane, 0d); - AnchorPane.setLeftAnchor(medicationPane, 0d); - AnchorPane.setRightAnchor(medicationPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } + Tab defaultTab = mainTabPane.getTabs().get(0); + mainTabPane.getSelectionModel().select(defaultTab); + defaultTab.getOnSelectionChanged().handle(new Event(Event.ANY)); } } diff --git a/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java b/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java new file mode 100644 index 0000000..16a67ba --- /dev/null +++ b/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java @@ -0,0 +1,82 @@ +package de.hitec.nhplus.utils.tab; + +import de.hitec.nhplus.Main; +import de.hitec.nhplus.login.Permissions; +import de.hitec.nhplus.login.User; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.BorderPane; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +public class TabManager { + private final User user; + + public TabManager(User user) { + this.user = user; + } + + private boolean hasPermissions(int requiredPermissions, int permissions) { + return requiredPermissions == Permissions.EVERYBODY + || (permissions & requiredPermissions) != 0; + } + + public void setupTab(TabPane tabPane, TabStruct tabStruct) { + if (!hasPermissions(tabStruct.requiredPermissions, user.getPermissions())) { + return; + } + Tab tab = new Tab(); + tab.setText(tabStruct.title); + AnchorPane pane = new AnchorPane(); + tab.setContent(pane); + tab.setOnSelectionChanged(loadTabEventHandler(tabStruct, pane)); + tabPane.getTabs().add(tab); + } + + private EventHandler loadTabEventHandler(TabStruct tabStruct, AnchorPane pane) { + return event -> { + try { + BorderPane patientsPane = FXMLLoader.load( + Objects.requireNonNull(Main.class.getResource(tabStruct.view)) + ); + pane.getChildren().setAll(patientsPane); + AnchorPane.setTopAnchor(patientsPane, 0d); + AnchorPane.setBottomAnchor(patientsPane, 0d); + AnchorPane.setLeftAnchor(patientsPane, 0d); + AnchorPane.setRightAnchor(patientsPane, 0d); + } catch (IOException exception) { + exception.printStackTrace(); + } + }; + } + + public void setupSubTabPane(TabPane parentTabPane, String title, int requiredPermissions, List subTabs) { + if (!hasPermissions(requiredPermissions, user.getPermissions())) { + return; + } + Tab tab = new Tab(); + tab.setText(title); + TabPane subTabPane = new TabPane(); + subTabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); + tab.setContent(subTabPane); + subTabs.forEach(tabStruct -> setupTab(subTabPane, tabStruct)); + if (subTabPane.getTabs().isEmpty()) { + return; + } + tab.setOnSelectionChanged(loadSubTabPaneEventHandler(subTabPane)); + parentTabPane.getTabs().add(tab); + } + + private EventHandler loadSubTabPaneEventHandler(TabPane tabPane) { + return event -> { + Tab tab = tabPane.getSelectionModel().getSelectedItem(); + tab.getOnSelectionChanged().handle(new Event(Event.ANY)); + }; + } +} diff --git a/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java b/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java new file mode 100644 index 0000000..9a49919 --- /dev/null +++ b/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java @@ -0,0 +1,13 @@ +package de.hitec.nhplus.utils.tab; + +public class TabStruct { + public String title; + public String view; + public int requiredPermissions; + + public TabStruct(String title, String view, int requiredPermissions) { + this.title = title; + this.view = view; + this.requiredPermissions = requiredPermissions; + } +} \ No newline at end of file diff --git a/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml b/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml index fdb8bef..033a28e 100644 --- a/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml +++ b/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml @@ -1,38 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - +/> \ No newline at end of file