В случае, когда я хочу ограничить некоторые страницы для некоторых пользователей, в маршрутизаторе я определяю разрешение в мета, например:
routes: [
{
path: 'transport',
name: 'transport',
component: Transport,
meta: { permission: "edit_transport" }
},
]
Когда пользователь входит в систему, это JWT, где я могу найти то, чторазрешение, которое он / она имеет, и в route.beforeEach
я проверяю, есть ли у пользователя это разрешение, он / она может посещать страницу.
router.beforeEach((to, from, next) => {
let token = window.localStorage.getItem('user_token');
if(to.meta.permission == 'edit_transport') {
//if user's token has edit_tranport permission let him visit the page
}
})
Но теперь у меня есть такие разрешения. В базе данных есть таблица, в которой администратор определяет разрешение для страницы:
id permision page
_____________________________________
1 edit_transport transport
2 write_post create_post
Это означает, например, что пользователю необходимо разрешение edit_transport
.посетить транспортную страницу.
У меня есть решение для этого, но я не знаю, хорошо это или плохо, поэтому мне нужна помощь
Мое решение: сначала я должен взять все эторазрешения из базы данных и сохранить их в vuex
хранилище, а затем получить доступ к данным этого хранилища в route.beforeEach
и проверить, что требуется странице разрешения, а затем проверить, есть ли у пользователя это разрешение
router.beforeEach((to, from, next) => {
let token = window.localStorage.getItem('user_token');
let pagepermission = store.permissions[to.name]
if (token.has(pagepermission)) {
// let user visit the page
} else {
// redirect
}
})
Итак, этохороший путь или есть какой-то другой способ лучше, чем этот?