diff --git a/src/router/index.js b/src/router/index.js
index c682264d964e367ac2690870778529900553b1bf..bead7d81a59032988eb532c7504cf9f1427ab9db 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -9,15 +9,16 @@ import Layout from '@/views/layout/Layout'
 const disabledFeatures = process.env.DISABLED_FEATURES || []
 const settingsDisabled = disabledFeatures.includes('settings')
 const settingsChildren = () => {
-  const items = localStorage.getItem('settingsTabs') || []
-  return JSON.parse(items).map(({ label, value }) => {
-    return {
-      path: value,
-      component: () => import(`@/views/settings/components/${label}`),
-      name: label,
-      meta: { title: label }
-    }
-  })
+  return localStorage.getItem('settingsTabs')
+    ? JSON.parse(localStorage.getItem('settingsTabs')).map(({ label, value }) => {
+      return {
+        path: value,
+        component: () => import(`@/views/settings/components/${label}`),
+        name: label,
+        meta: { title: label }
+      }
+    })
+    : []
 }
 const settings = {
   path: '/settings',
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index 13f60efb4f8409c975ea9e04eca584fd530ff224..c214e9ce3f8752f857698945a6b517a21fb6785d 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -40,23 +40,48 @@ const permission = {
     addRouters: []
   },
   mutations: {
-    SET_ROUTERS: (state, routers) => {
+    SET_ADD_ROUTERS: (state, routers) => {
       state.addRouters = routers
-      state.routers = constantRouterMap.concat(routers)
+    },
+    SET_ROUTERS: (state, routers) => {
+      state.routers = routers
     }
   },
   actions: {
-    GenerateRoutes({ commit }, data) {
+    GenerateRoutes({ commit }, { roles, routes }) {
       return new Promise(resolve => {
-        const { roles } = data
-        let accessedRouters
-        if (roles.includes('admin')) {
-          accessedRouters = asyncRouterMap
+        if (!routes) {
+          let accessedRouters
+          if (roles.includes('admin')) {
+            accessedRouters = asyncRouterMap
+          } else {
+            accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
+          }
+          commit('SET_ADD_ROUTERS', accessedRouters)
+          commit('SET_ROUTERS', constantRouterMap.concat(accessedRouters))
+          resolve()
         } else {
-          accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
+          const updRoutes = routes.reduce((acc, element) => {
+            if (acc.findIndex(route => route.path === element.path) !== -1) {
+              return acc
+            } else if (element.parent) {
+              const index = acc.findIndex(route => route.path === element.parent.path)
+              if (index > -1) {
+                const children = acc[index].children ? [...acc[index].children, element] : [element]
+                acc[index] = { ...acc[index], children }
+                return acc
+              } else {
+                const newRoute = { ...element.parent, children: [element] }
+                return [...acc, newRoute]
+              }
+            } else {
+              return [...acc, element]
+            }
+          }, [])
+
+          commit('SET_ROUTERS', updRoutes)
+          resolve()
         }
-        commit('SET_ROUTERS', accessedRouters)
-        resolve()
       })
     }
   }
diff --git a/src/views/layout/components/Sidebar/SidebarItem.vue b/src/views/layout/components/Sidebar/SidebarItem.vue
index 75b3d58c9f86d8098b2beae878180211616735ab..9db479da606f7327b56b10df5c5aa0708f77f5a2 100644
--- a/src/views/layout/components/Sidebar/SidebarItem.vue
+++ b/src/views/layout/components/Sidebar/SidebarItem.vue
@@ -91,7 +91,6 @@ export default {
   methods: {
     hasOneShowingChild(children, parent) {
       if (parent.hasSubmenu) {
-        console.log(children)
         return false
       }
 
diff --git a/src/views/layout/components/Sidebar/index.vue b/src/views/layout/components/Sidebar/index.vue
index b23e4dc66cd29f2cbc45baf220058ddfe62247f2..73c7a98b71a7d3cd6eeb4f2fad9b97d007466448 100644
--- a/src/views/layout/components/Sidebar/index.vue
+++ b/src/views/layout/components/Sidebar/index.vue
@@ -18,13 +18,14 @@
 import { mapGetters } from 'vuex'
 import SidebarItem from './SidebarItem'
 import variables from '@/styles/variables.scss'
-// import router from '@/router'
+import router from '@/router'
 
 export default {
   components: { SidebarItem },
   computed: {
     ...mapGetters([
       'permission_routers',
+      'roles',
       'sidebar',
       'tabs'
     ]),
@@ -41,20 +42,22 @@ export default {
   methods: {
     async handleOpen($event) {
       if ($event === '/settings') {
-        let items = localStorage.getItem('settingsTabs')
-        if (!items) {
+        if (!localStorage.getItem('settingsTabs')) {
           await this.$store.dispatch('FetchSettings')
-          items = this.tabs
-          localStorage.setItem('settingsTabs', JSON.stringify(items))
+          const menuItems = this.tabs
+          localStorage.setItem('settingsTabs', JSON.stringify(menuItems))
+
+          menuItems.forEach(({ label, value }) => {
+            router.addRoute('Settings', {
+              path: value,
+              component: () => import(`@/views/settings/components/${label}`),
+              name: label,
+              meta: { title: label }
+            })
+          })
+          const routes = router.getRoutes().filter(item => !item.hidden)
+          this.$store.dispatch('GenerateRoutes', { roles: this.roles, routes })
         }
-        JSON.parse(items).forEach(item => {
-          // router.addRoute('Settings', [{
-          //   path: item.value,
-          //   component: {
-          //     template: '<span>Ioio</span>'
-          //   }
-          // }])
-        })
       }
     }
   }