Как обрабатывать разрешения для маршрута из базы данных? - PullRequest
0 голосов
/ 13 декабря 2018

В случае, когда я хочу ограничить некоторые страницы для некоторых пользователей, в маршрутизаторе я определяю разрешение в мета, например:

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
    }
})

Итак, этохороший путь или есть какой-то другой способ лучше, чем этот?

1 Ответ

0 голосов
/ 13 декабря 2018

Это хорошая проверка для клиентской стороны, если вы также защищаете маршруты / конечные точки на серверной стороне, я думаю, что это было бы наиболее подходящим решением.

Я не уверен, что вы используете в бэкэнде, но если его узел, вы можете использовать что-то вроде Паспорт для управления ролями - как промежуточное ПО для маршрутов и конечных точек.

...