vue3系統(tǒng)進(jìn)入頁面前的權(quán)限判斷和重定向方式
應(yīng)用場景
經(jīng)常有系統(tǒng)的權(quán)限判定,比如某個(gè)頁面只能角色a進(jìn)入,或者一個(gè)系統(tǒng)多個(gè)頁面都有權(quán)限設(shè)置,根據(jù)用戶的權(quán)限判斷是否能進(jìn)入頁面,這類權(quán)限控制應(yīng)該是比較基礎(chǔ)和常見的吧。
這次就記錄一下我之前做的權(quán)限控制流程。
開發(fā)流程
主要通過進(jìn)入頁面前的判斷:router.beforeEach()
這里實(shí)現(xiàn)的控制,例如:
- 進(jìn)入頁面時(shí)判斷是否登錄,如果未登錄就跳到login頁面,如果登錄了就進(jìn)入到項(xiàng)目列表頁;
- 進(jìn)入項(xiàng)目詳情頁,需要判斷用戶是否有權(quán)限;
- 諸如以上。
詳細(xì)開發(fā)流程
我在根目錄文件下,新增一個(gè)permission.js頁面,并在main.js中引入,借助router的路由攔截功能,實(shí)現(xiàn)權(quán)限判斷。
1.引入權(quán)限控制文件
項(xiàng)目結(jié)構(gòu)如下:
在main.js引入
2.權(quán)限控制詳細(xì)
下面是permission里的權(quán)限控制的主要操作。
import router, { asyncRoutes } from '@/router' import { getToken, setToken, removeToken } from '@/utils/auth' import getPageTitle from '@/utils/getPageTitle' //白名單 const whiteList = ['/login', '/404', '/401', '/500'] // no redirect whitelist router.beforeEach(async (to, from, next) => { // set page title document.title = getPageTitle(to.meta.title) const hasToken = getToken() let path = to.path // 白名單中路由直接放行 if (whiteList.includes(path)) { next() return } //如果已登錄,有token,則跳到重定向頁面 if (hasToken) { if (to.path === '/login') { // if is logged in, redirect to the home page next({ path: '/' }) } //在這里可以進(jìn)行其他判斷,如果已經(jīng)登錄,并且不是在登錄頁面,即在頁面C,那么可以獲取用戶的角色權(quán)限 ,對用戶是否能進(jìn)入頁面C進(jìn)行判斷 else { next() } } else { //whiteList 里的內(nèi)容不需要驗(yàn)簽 if (whiteList.indexOf(to.path) !== -1) { next() } else { //無登錄token,重定向,登錄后跳轉(zhuǎn) if (to.query.token) { next(`/login?redirect=${to.path}?token=${to.query.token}`) } else { next(`/login`) } } } }) router.afterEach(async (to, from, next) => { if (to.path === '/login') { } else { //調(diào)接口,記錄日志 //…… } })
總結(jié):
其實(shí)上面主要借助的是路由守衛(wèi)的攔截,對權(quán)限進(jìn)行控制。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Vue中keep-alive的作用及使用方法
keep-alive是Vue的內(nèi)置組件,當(dāng)它包裹動態(tài)組件時(shí),會緩存不活動的組件實(shí)例,該組件將不會銷毀,這篇文章主要介紹了關(guān)于Vue中keep-alive的作用是什么?怎么使用,需要的朋友可以參考下2023-04-04基于Vue3定制復(fù)雜組件滾動條的實(shí)現(xiàn)
這篇文章主要介紹了如何利用vue3定制復(fù)雜組件的滾動條,文中通過示例代碼講解詳細(xì),需要的朋友們下面就跟隨小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))
開發(fā)中有時(shí)候需要input只能輸入數(shù)字,下面這篇文章主要給大家介紹了關(guān)于element-ui中el-input只輸入數(shù)字(包括整數(shù)和小數(shù))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09Vue開發(fā)實(shí)現(xiàn)滑動驗(yàn)證組件
這篇文章主要為大家詳細(xì)介紹了如何利用Vue開發(fā)實(shí)現(xiàn)簡單的滑動驗(yàn)證組件,并且適配移動和PC,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-07-07