Browse Source

NEW: admin menu generator
NEW: page roles, now use @named_routes to define which role has a route.

Giancarlo 7 years ago
parent
commit
0f36f905e6

+ 9 - 4
omlink.sql

@@ -1,4 +1,4 @@
--- Adminer 4.7.1 MySQL dump
+-- Adminer 4.6.3 MySQL dump
 
 SET NAMES utf8;
 SET time_zone = '+00:00';
@@ -16,9 +16,14 @@ CREATE TABLE `label_bindings` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `label_id` varchar(255) NOT NULL,
   `barcode` varchar(255) NOT NULL,
+  `bat_good` int(11) DEFAULT NULL,
+  `bat_low` timestamp NULL DEFAULT NULL,
+  `bat_bad` timestamp NULL DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
+INSERT INTO `label_bindings` (`id`, `label_id`, `barcode`, `bat_good`, `bat_low`, `bat_bad`) VALUES
+(1,	'0108C4567',	'aaaaaaaa',	1554380794,	NULL,	NULL);
 
 DROP TABLE IF EXISTS `notifications`;
 CREATE TABLE `notifications` (
@@ -54,7 +59,7 @@ CREATE TABLE `users` (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 INSERT INTO `users` (`id`, `username`, `saltedpassword`, `roles`, `avatar`) VALUES
-(1,	'admin',	'$2y$10$cJiNAGj.XSELKuVuQ9gSwOlExVSDGj6IsuIsSsK.fV0KEJX56ncWK',	'a:1:{i:0;s:5:\"admin\";}',	''),
-(2,	'operatore1',	'$2y$10$9uRKekk0i9Z08fXQFSjW6.PK6l/fk956bNvMjmBMmaJNqo9KJ5Txu',	'a:1:{i:0;s:8:\"customer\";}',	'');
+(1,	'admin',	'$2y$10$cJiNAGj.XSELKuVuQ9gSwOlExVSDGj6IsuIsSsK.fV0KEJX56ncWK',	'a:2:{i:0;s:5:\"admin\";i:1;s:4:\"demo\";}',	''),
+(2,	'operatore1',	'$2y$10$9uRKekk0i9Z08fXQFSjW6.PK6l/fk956bNvMjmBMmaJNqo9KJ5Txu',	'a:1:{i:0;s:4:\"demo\";}',	'');
 
--- 2019-04-03 16:56:44
+-- 2019-04-04 17:13:27

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "OM-Link",
-  "version": "1.7.1",
+  "version": "1.8.0",
   "private": true,
   "description": "OM-Link Engine",
   "scripts": {

+ 4 - 4
src/Modules/Blank/Blank.php

@@ -15,17 +15,17 @@ class Blank extends PluginStrategy
 {
 	public function __construct()
 	{
-		$this->AddRoute('GET /', __NAMESPACE__ . '\Pages->HelloWorld');
+		$this->AddRoute('GET /demo', __NAMESPACE__ . '\Pages->HelloWorld');
 
 		$this->AddMenuItem('Demo', [
-			'url' => '',
+			'url' => 'demo',
 			'imgClass' => 'shadow p-3 rounded bg-white',
 			'image' => 'ui/images/demo.png',
-			'permissionName' => 'customer'
+			'permissionName' => 'demo'
 		]);
 
 		$roles = new UserRoles();
-		$roles->add('customer');
+		$roles->add('demo');
 	}
 }
 

+ 23 - 21
src/OpenMind/Admin/Admin.php

@@ -12,27 +12,29 @@ use OpenMind\System\UserRoles;
 
 class Admin extends PluginStrategy
 {
-	public function __construct()
-	{
-		$this->AddRoute('GET /admin', __NAMESPACE__ . '\Pages->Admin');
-
-		$this->AddRoute('GET /admin/eslstatus', __NAMESPACE__ . '\Pages->ESLStatus');
-
-		$this->AddMenuItem('admin', [
-			'url' => 'admin',
-			'imgClass' => 'shadow p-3 rounded bg-white',
-			'permissionName' => 'admin'
-		]);
-
-		$this->AddMenuItem('ESLStatus', [
-			'url' => 'admin/eslstatus',
-			'imgClass' => 'shadow p-3 rounded bg-white',
-			'permissionName' => 'admin'
-		]);
-
-		$roles = new UserRoles();
-		$roles->add('admin');
-	}
+  public function __construct()
+  {
+    $this->AddRoute('GET @admin: /admin', __NAMESPACE__ . '\Pages->Admin');
+    $this->AddRoute('GET @admin: /admin/eslstatus', __NAMESPACE__ . '\Pages->ESLStatus');
+    $this->AddRoute('GET @admin: /admin/eslissues', __NAMESPACE__ . '\Pages->ESLIssues');
+    $this->AddRoute('GET @admin: /admin/apstatus', __NAMESPACE__ . '\Pages->APStatus');
+
+    $this->AddMenuItem('Admin', ['url' => 'admin', 'permissionName' => 'admin']);
+
+    // System Settings
+    $this->AddMenuItem('System Settings', ['mainMenu' => 'adminMainMenu', 'mdiClass' => 'settings', 'permissionName' => 'admin']);
+    $this->AddMenuItem('OM-Link Settings', ['mainMenu' => 'System Settings', 'url' => 'admin/omlsettings', 'permissionName' => 'admin']);
+
+    // Menu: ESL Ops
+    $this->AddMenuItem('ESL Ops', ['mainMenu' => 'adminMainMenu', 'mdiClass' => 'label', 'permissionName' => 'admin']);
+    $this->AddMenuItem('Status', ['mainMenu' => 'ESL Ops', 'url' => 'admin/eslstatus', 'permissionName' => 'admin']);
+    $this->AddMenuItem('Issues and Fixes', ['mainMenu' => 'ESL Ops', 'url' => 'admin/eslissues', 'permissionName' => 'admin']);
+    $this->AddMenuItem('AP Status', ['mainMenu' => 'ESL Ops', 'url' => 'admin/apstatus', 'permissionName' => 'admin']);
+    $this->AddMenuItem('FB Core Settings', ['mainMenu' => 'ESL Ops', 'url' => 'admin/fbcoresettings', 'permissionName' => 'admin']);
+
+    $roles = new UserRoles();
+    $roles->add('admin');
+  }
 }
 
 /** @var \OpenMind\Admin $Admin */

+ 1 - 1
src/OpenMind/Admin/Pages.php

@@ -15,7 +15,7 @@ class Pages extends Controller
 {
 	private $findBoxCore = null;
 
-	public function __construct($f3)
+  public function __construct($f3)
 	{
 		parent::__construct($f3);
 

BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-1.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-10.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-2.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-3.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-4.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-5.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-6.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-7.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-8.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/avatar-9.jpg


BIN
src/OpenMind/Admin/ui/assets/images/users/default.png


+ 178 - 191
src/OpenMind/Admin/ui/masterpage.tpl

@@ -1,204 +1,191 @@
 <!DOCTYPE html>
 <html lang="it">
 <head>
-	<meta charset="UTF-8">
-	<title>{{@SITENAME}}</title>
-	<link href="{{@BASEURL}}/ui/images/favicon.ico" rel="shortcut icon" type="image/x-icon">
-	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
-	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-
-	<!-- DataTables -->
-	<link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
-	<link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/buttons.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
-	<!-- Responsive datatable examples -->
-	<link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/responsive.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
-	<!-- Multi Item Selection examples -->
-	<link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/select.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
-
-
-	<!-- App css -->
-	<link href="{{@BASEURL}}/{{@UI}}assets/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
-	<link href="{{@BASEURL}}/{{@UI}}assets/css/icons.css" rel="stylesheet" type="text/css"/>
-	<link href="{{@BASEURL}}/{{@UI}}assets/css/style.css" rel="stylesheet" type="text/css"/>
-	<link href="{{@BASEURL}}/{{@UI}}css/admin.main.css" rel="stylesheet" type="text/css"/>
-
-
-	<script type="text/javascript">
-		const BASEURL = '{{@BASEURL}}';
-	</script>
+  <meta charset="UTF-8">
+  <title>{{@SITENAME}}</title>
+  <link href="{{@BASEURL}}/ui/images/favicon.ico" rel="shortcut icon" type="image/x-icon">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+
+  <!-- DataTables -->
+  <link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
+  <link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/buttons.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
+  <!-- Responsive datatable examples -->
+  <link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/responsive.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
+  <!-- Multi Item Selection examples -->
+  <link href="{{@BASEURL}}/{{@UI}}assets/plugins/datatables/select.bootstrap4.min.css" rel="stylesheet" type="text/css"/>
+
+
+  <!-- App css -->
+  <link href="{{@BASEURL}}/{{@UI}}assets/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
+  <link href="{{@BASEURL}}/{{@UI}}assets/css/icons.css" rel="stylesheet" type="text/css"/>
+  <link href="{{@BASEURL}}/{{@UI}}assets/css/style.css" rel="stylesheet" type="text/css"/>
+  <link href="{{@BASEURL}}/{{@UI}}css/admin.main.css" rel="stylesheet" type="text/css"/>
+
+
+  <script type="text/javascript">
+    const BASEURL = '{{@BASEURL}}';
+  </script>
 </head>
 <body>
 
 <!-- Navigation Bar-->
 <header id="topnav">
-	<div class="topbar-main">
-		<div class="container-fluid">
-
-			<!-- Logo container-->
-			<div class="logo">
-				<!-- Text Logo -->
-				<a href="index.html" class="logo">
-					<span class="logo-small"><i class="mdi mdi-radar"></i></span>
-					<span class="logo-large"><i class="mdi mdi-radar"></i> OM-Link</span>
-				</a>
-				<!-- Image Logo -->
-				<!-- a href="index.html" class="logo">
+  <div class="topbar-main">
+    <div class="container-fluid">
+
+      <!-- Logo container-->
+      <div class="logo">
+        <!-- Text Logo -->
+        <a href="index.html" class="logo">
+          <span class="logo-small"><i class="mdi mdi-radar"></i></span>
+          <span class="logo-large"><i class="mdi mdi-radar"></i> OM-Link</span>
+        </a>
+        <!-- Image Logo -->
+        <!-- a href="index.html" class="logo">
 					<img src="{{@BASEURL}}/{{@UI}}assets/images/logo-sm.png" alt="" height="26" class="logo-small">
 					<img src="{{@BASEURL}}/{{@UI}}assets/images/logo.png" alt="" height="24" class="logo-large">
 				</a -->
 
-			</div>
-			<!-- End Logo container-->
-
-			<div class="menu-extras topbar-custom">
-
-				<ul class="list-unstyled topbar-right-menu float-right mb-0">
-
-					<li class="menu-item">
-						<!-- Mobile menu toggle-->
-						<a class="navbar-toggle nav-link">
-							<div class="lines">
-								<span></span>
-								<span></span>
-								<span></span>
-							</div>
-						</a>
-						<!-- End mobile menu toggle-->
-					</li>
-					<li>
-						<!-- Notification -->
-						<div class="notification-box">
-							<ul class="list-inline mb-0">
-								<li>
-									<a href="javascript:void(0);" class="right-bar-toggle">
-										<i class="mdi mdi-bell-outline noti-icon"></i>
-									</a>
-									<div class="noti-dot">
-										<span class="dot"></span>
-										<span class="pulse"></span>
-									</div>
-								</li>
-							</ul>
-						</div>
-						<!-- End Notification bar -->
-					</li>
-
-					<li class="dropdown notification-list">
-						<a class="nav-link dropdown-toggle waves-effect waves-light nav-user" data-toggle="dropdown" href="#" role="button"
-							 aria-haspopup="false" aria-expanded="false">
-							<img src="{{@BASEURL}}/{{@UI}}assets/images/users/avatar-1.jpg" alt="user" class="rounded-circle">
-						</a>
-						<div class="dropdown-menu dropdown-menu-right profile-dropdown ">
-
-							<!-- item-->
-							<a href="{{@BASEURL}}/logout" class="dropdown-item notify-item">
-								<i class="ti-power-off m-r-5"></i> Logout
-							</a>
-
-						</div>
-					</li>
-
-				</ul>
-			</div>
-			<!-- end menu-extras -->
-
-			<div class="clearfix"></div>
-
-		</div> <!-- end container -->
-	</div>
-	<!-- end topbar-main -->
-
-	<div class="navbar-custom">
-		<div class="container-fluid">
-			<div id="navigation">
-				<!-- Navigation Menu-->
-				<ul class="navigation-menu">
-					<li class="has-submenu">
-						<a href="{{@BASEURL}}/admin"><i class="mdi mdi-view-dashboard"></i> <span> Dashboard </span> </a>
-					</li>
-
-					<li class="has-submenu">
-						<a href="#"><i class="mdi mdi-label"></i><span> ESL Ops</span> </a>
-						<ul class="submenu">
-							<li><a href="{{@BASEURL}}/admin/eslstatus">Label Status</a></li>
-							<li><a href="form-advanced.html">Battery Level</a></li>
-							<li><a href="form-validation.html">Label Issues</a></li>
-							<li><a href="form-validation.html">AP Status</a></li>
-						</ul>
-					</li>
-
-					<li class="has-submenu">
-						<a href="#"><i class="mdi mdi-settings"></i> <span> System Settings</span> </a>
-						<ul class="submenu megamenu">
-							<li>
-								<ul>
-									<li><a href="ui-buttons.html">Buttons</a></li>
-									<li><a href="ui-cards.html">Cards</a></li>
-								</ul>
-							</li>
-							<li>
-								<ul>
-									<li><a href="ui-dripicons.html">Dripicons</a></li>
-									<li><a href="ui-modals.html">Modals</a></li>
-								</ul>
-							</li>
-						</ul>
-					</li>
-
-				</ul>
-				<!-- End navigation menu -->
-			</div> <!-- end #navigation -->
-		</div> <!-- end container -->
-	</div> <!-- end navbar-custom -->
+      </div>
+      <!-- End Logo container-->
+
+      <div class="menu-extras topbar-custom">
+
+        <ul class="list-unstyled topbar-right-menu float-right mb-0">
+
+          <li class="menu-item">
+            <!-- Mobile menu toggle-->
+            <a class="navbar-toggle nav-link">
+              <div class="lines">
+                <span></span>
+                <span></span>
+                <span></span>
+              </div>
+            </a>
+            <!-- End mobile menu toggle-->
+          </li>
+          <li>
+            <!-- Notification -->
+            <div class="notification-box">
+              <ul class="list-inline mb-0">
+                <li>
+                  <a href="javascript:void(0);" class="right-bar-toggle">
+                    <i class="mdi mdi-bell-outline noti-icon"></i>
+                  </a>
+                  <div class="noti-dot">
+                    <span class="dot"></span>
+                    <span class="pulse"></span>
+                  </div>
+                </li>
+              </ul>
+            </div>
+            <!-- End Notification bar -->
+          </li>
+
+          <li class="dropdown notification-list">
+            <a class="nav-link dropdown-toggle waves-effect waves-light nav-user" data-toggle="dropdown" href="#" role="button"
+               aria-haspopup="false" aria-expanded="false">
+              <img src="{{@BASEURL}}/{{@UI}}assets/images/users/default.png" alt="user" class="rounded-circle">
+            </a>
+            <div class="dropdown-menu dropdown-menu-right profile-dropdown ">
+
+              <!-- item-->
+              <a href="{{@BASEURL}}/logout" class="dropdown-item notify-item">
+                <i class="ti-power-off m-r-5"></i> Logout
+              </a>
+
+            </div>
+          </li>
+
+        </ul>
+      </div>
+      <!-- end menu-extras -->
+
+      <div class="clearfix"></div>
+
+    </div> <!-- end container -->
+  </div>
+  <!-- end topbar-main -->
+
+  <div class="navbar-custom">
+    <div class="container-fluid">
+      <div id="navigation">
+        <!-- Navigation Menu-->
+        <ul class="navigation-menu">
+          <li class="has-submenu">
+            <a href="{{@BASEURL}}/admin"><i class="mdi mdi-view-dashboard"></i> <span> Dashboard </span> </a>
+          </li>
+
+          <repeat group="{{@GLOBALMENU}}" key="{{@mainmenuKey}}" value="{{@mainmenu}}">
+            <check if="{{ @mainmenu.mainMenu == 'adminMainMenu' }}">
+              <li class="has-submenu">
+                <a href="#"><i class="mdi mdi-{{@mainmenu.mdiClass}}"></i><span> {{@mainmenuKey}}</span> </a>
+                <ul class="submenu">
+                  <repeat group="{{@GLOBALMENU}}" key="{{@ikey}}" value="{{@menuitem}}">
+                    <check if="{{ !empty(@menuitem.url) && @menuitem.mainMenu == @mainmenuKey}}">
+                      <li><a href="{{@BASEURL . '/' . @menuitem.url}}">{{@ikey}}</a></li>
+                    </check>
+                  </repeat>
+                </ul>
+              </li>
+            </check>
+          </repeat>
+
+        </ul>
+        <!-- End navigation menu -->
+      </div> <!-- end #navigation -->
+    </div> <!-- end container -->
+  </div> <!-- end navbar-custom -->
 </header>
 <!-- End Navigation Bar-->
 
 
 <div class="wrapper">
-	<div class="container-fluid">
-
-		<!-- Page-Title -->
-		<div class="row">
-			<div class="col-sm-12">
-				<h4 class="page-title">{{@PAGENAME}}</h4>
-			</div>
-		</div>
-		<!-- end page title end breadcrumb -->
-
-		<div class="row">
-
-			<include href="{{@CONTENT}}" if="{{isset(@CONTENT)}}"/>
-
-		</div>
-		<!-- end row -->
-
-	</div> <!-- end container -->
-
-
-	<!-- Right Sidebar -->
-	<div class="side-bar right-bar">
-		<a href="javascript:void(0);" class="right-bar-toggle">
-			<i class="mdi mdi-close-circle-outline"></i>
-		</a>
-		<h4 class="">Notifications</h4>
-		<div class="notification-list nicescroll">
-			<ul class="list-group list-no-border user-list">
-				<li class="list-group-item">
-					<a href="#" class="user-list-item">
-						<div class="avatar">
-							<img src="{{@BASEURL}}/{{@UI}}assets/images/users/avatar-2.jpg" alt="">
-						</div>
-						<div class="user-desc">
-							<span class="name">FindBox service</span>
-							<span class="desc">Service unavailable</span>
-							<span class="time">1 seconds ago</span>
-						</div>
-					</a>
-				</li>
-			</ul>
-		</div>
-	</div>
-	<!-- /Right-bar -->
+  <div class="container-fluid">
+
+    <!-- Page-Title -->
+    <div class="row">
+      <div class="col-sm-12">
+        <h4 class="page-title">{{@PAGENAME}}</h4>
+      </div>
+    </div>
+    <!-- end page title end breadcrumb -->
+
+    <div class="row">
+
+      <include href="{{@CONTENT}}" if="{{isset(@CONTENT)}}"/>
+
+    </div>
+    <!-- end row -->
+
+  </div> <!-- end container -->
+
+
+  <!-- Right Sidebar -->
+  <div class="side-bar right-bar">
+    <a href="javascript:void(0);" class="right-bar-toggle">
+      <i class="mdi mdi-close-circle-outline"></i>
+    </a>
+    <h4 class="">Notifications</h4>
+    <div class="notification-list nicescroll">
+      <ul class="list-group list-no-border user-list">
+        <li class="list-group-item">
+          <a href="#" class="user-list-item">
+            <div class="avatar">
+              <img src="{{@BASEURL}}/{{@UI}}assets/images/users/avatar-2.jpg" alt="">
+            </div>
+            <div class="user-desc">
+              <span class="name">FindBox service</span>
+              <span class="desc">Service unavailable</span>
+              <span class="time">1 seconds ago</span>
+            </div>
+          </a>
+        </li>
+      </ul>
+    </div>
+  </div>
+  <!-- /Right-bar -->
 
 </div>
 <!-- end wrapper -->
@@ -206,13 +193,13 @@
 
 <!-- Footer -->
 <footer class="footer">
-	<div class="container">
-		<div class="row">
-			<div class="col-12 text-center">
-				2019 © Open Mind Group
-			</div>
-		</div>
-	</div>
+  <div class="container">
+    <div class="row">
+      <div class="col-12 text-center">
+        2019 © Open Mind Group
+      </div>
+    </div>
+  </div>
 </footer>
 <!-- End Footer -->
 

+ 55 - 54
src/OpenMind/Web/Controller.php

@@ -12,66 +12,67 @@ use OpenMind\System\User;
 
 class Controller
 {
-	/** @var SQL $dbHandle OM-Link Database */
-	protected $dbHandle;
+  /** @var SQL $dbHandle OM-Link Database */
+  protected $dbHandle;
 
-	/**
-	 * Sanitized POST request, useful if sanitized POST is need
-	 * @var array $sanitizedPostRequest
-	 */
-	private $sanitizedPostRequest;
+  /**
+   * Sanitized POST request, useful if sanitized POST is need
+   * @var array $sanitizedPostRequest
+   */
+  private $sanitizedPostRequest;
 
-	public function __construct($f3)
-	{
-		$this->sanitizedPostRequest = $f3->clean($f3->get('POST'));
-		$this->dbHandle = $f3->get('DB');
+  public function __construct($f3)
+  {
+    $this->sanitizedPostRequest = $f3->clean($f3->get('POST'));
+    $this->dbHandle = $f3->get('DB');
 
-		if (!$f3->exists('SESSION.user') && !in_array($f3->get('PATTERN'), ['/loginform', '/admin', '/'])) {
-			$f3->reroute('/');
-			return;
-		}
+    /** @var \OpenMind\System\User $loggedUser */
+    $loggedUser = $f3->exists('SESSION.user') ? User::Restore() : null;
 
-		if ($f3->exists('SESSION.user')) {
-			$f3->set('USER', User::Restore());
-			// Check if user has permissions to navigate in current url
-			$permissionsMenu = $f3->get('GLOBALMENU');
-			foreach($permissionsMenu as $menu) {
-				$currentURL = $f3->get('BASEURL') . '/' . $menu['url'];
-				if ($f3->get('URI') != $currentURL)
-					continue;
-				$permName = $menu['permissionName'];
-				if (!$f3->get('USER')->hasPermission($permName)) {
-					$f3->reroute('/');
-					return;
-				}
-			}
-		}
+    $f3->set('USER', $loggedUser);
 
-		$f3->reroute('/');
-		return;
-	}
+    // Check if user has permissions to navigate in current url
+    $currentAlias = $f3->get('ALIAS');
 
-	/**
-	 * Return the sanitized POST parameters
-	 *
-	 * @return mixed
-	 */
-	protected function getSanitizedPostRequest()
-	{
-		return $this->sanitizedPostRequest;
-	}
+    // If user is not logged and page require a permission, redirect to '/'
+    if (!$loggedUser && $currentAlias) {
+      $f3->reroute('/');
+      return;
+    }
 
-	/**
-	 * Use setTimeout to request a change url
-	 *
-	 * @param string $url to change to
-	 * @param int $msDelay
-	 */
-	protected function setRedirect(string $url, int $msDelay)
-	{
-		global $f3;
+    if (
+      $loggedUser &&  // user is logged in?
+      $currentAlias && // the page require a permission?
+      !$loggedUser->hasPermission($currentAlias) // The user has the permission to go next step?
+    ) {
+      $f3->reroute('/homemenu');
+      return;
+    }
 
-		$f3->set('REQ_REDIRECT', $url);
-		$f3->set('REQ_REDIRECT_MS', $msDelay);
-	}
+    return;
+  }
+
+  /**
+   * Return the sanitized POST parameters
+   *
+   * @return mixed
+   */
+  protected function getSanitizedPostRequest()
+  {
+    return $this->sanitizedPostRequest;
+  }
+
+  /**
+   * Use setTimeout to request a change url
+   *
+   * @param string $url to change to
+   * @param int $msDelay
+   */
+  protected function setRedirect(string $url, int $msDelay)
+  {
+    global $f3;
+
+    $f3->set('REQ_REDIRECT', $url);
+    $f3->set('REQ_REDIRECT_MS', $msDelay);
+  }
 }

+ 0 - 12
src/OpenMind/Web/Web.php

@@ -32,18 +32,6 @@ class Web extends PluginStrategy
 		$this->AddRoute('GET /', __NAMESPACE__ . '\Login->Login');
 		$this->AddRoute("POST /loginform", __NAMESPACE__ . '\Login->LoginForm');
 		$this->AddRoute("GET /logout", __NAMESPACE__ . '\Login->Logout');
-
-		/*    // Menu
-				$this->AddMenuItem('genericimport', [
-					'url' => 'importdata',
-					'imgClass' => 'shadow p-3 rounded bg-white',
-					'image' => 'ui/images/import.png',
-					'permissionName' => 'importdata'
-				]);*/
-
-		// Add to Global permission roles
-		/*    $roles = new UserRoles();
-				$roles->add('importdata');*/
 	}
 }