vue3权限的设置

Vue 3 中可以使用 Vue Router 和 Vuex 来实现权限控制。

首先,对于路由的权限控制,我们可以在路由定义时,设置 meta 属性,用于存储该路由的权限信息。例如,我们可以在 router.js 中定义一个路由数组:

import { createRouter, createWebHistory } from 'vue-router'
import Home from './views/Home.vue'
import Login from './views/Login.vue'
import Dashboard from './views/Dashboard.vue'
 const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    meta: { requiresAuth: false }
  },
  {
    path: '/login',
    name: 'Login',
    component: Login,
    meta: { requiresAuth: false }
  },
  {
    path: '/dashboard',
    name: 'Dashboard',
    component: Dashboard,
    meta: { requiresAuth: true }
  }
]
 const router = createRouter({
  history: createWebHistory(),
  routes
})
 export default router

在 meta 中我们可以设置 requiresAuth 属性,用于标识该路由是否需要登录权限,如果需要登录权限则设置为 true,否则设置为 false。

接下来,在路由跳转时,我们可以监听路由变化事件,通过判断该路由是否需要登录权限,来进行权限控制。例如,在 main.js 中添加以下代码:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
 router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !localStorage.getItem('token')) {
    // 跳转到登录页面,进行登录
    next('/login')
  } else {
    next()
  }
})
 createApp(App).use(router).mount('#app')

在 beforeEach 中,我们可以通过 to.meta.requiresAuth 判断该路由是否需要登录权限,如果需要登录权限且用户未登录,则跳转到登录页面进行登录,否则允许访问该路由。

此外,对于 Vuex 的权限控制,我们可以在 store.js 中定义一个 state 属性,用于存储用户信息和权限信息,例如:

import { createStore } from 'vuex'

const store = createStore({
  state: {
    user: null,
    permissions: [],
  },
  mutations: {
    setUser(state, user) {
      state.user = user
    },
    setPermissions(state, permissions) {
      state.permissions = permissions
    }
  }
})

export default store

在 mutations 中,我们可以定义 setUser 和 setPermissions 方法,用于设置用户信息和权限信息。在需要进行权限控制的组件中,我们可以使用 $store.state.permissions 判断当前用户是否具有某个权限,例如:

<template>
  <div>
    <h1>Dashboard</h1>
    <div v-if="$store.state.permissions.includes('view-dashboard')">可以访问 Dashboard</div>
    <div v-else>无权访问 Dashboard</div>
  </div>
</template>
 <script>
export default {
  name: 'Dashboard',
  mounted() {
    if (!this.$store.state.user) {
      // 未登录,跳转到登录页面
      this.$router.push('/login')
    }
  }
}
</script>

在组件中,我们可以使用 $store.state.user 判断用户是否已登录,如果未登录,则跳转到登录页面进行登录。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 中,你可以使用 Pinia 来管理应用程序的状态。要设置前端权限,你可以使用以下步骤: 1. 定义你的权限列表 在你的应用程序中,你需要定义一份权限列表,它应该包含你的应用程序中所有的权限。 例如: ```javascript const permissions = { viewPage1: '可以查看页面1', viewPage2: '可以查看页面2', editPage1: '可以编辑页面1', editPage2: '可以编辑页面2', }; ``` 2. 定义你的 store 使用 Pinia,你可以定义一个 store 来管理你的应用程序的状态。 例如: ```javascript import { defineStore } from 'pinia'; export const store = defineStore({ id: 'app', state: () => ({ user: null, permissions: [], }), getters: { hasPermission: (state) => (permission) => { return state.permissions.includes(permission); }, }, actions: { login(user) { this.user = user; this.permissions = user.permissions; }, logout() { this.user = null; this.permissions = []; }, }, }); ``` 在这个 store 中,我们定义了两个状态:`user` 和 `permissions`。当用户登录时,我们会将用户的权限设置到 `permissions` 状态中。 我们还定义了一个 `hasPermission` 的 getter,它接收一个权限名称作为参数,并返回一个布尔值,表明当前用户是否有该权限。 3. 在组件中使用 store 在你的组件中,你可以使用 `computed` 属性来获取当前用户是否有权限。 例如: ```javascript <template> <div v-if="hasViewPage1Permission">可以查看页面1</div> <div v-if="hasEditPage1Permission">可以编辑页面1</div> </template> <script> import { computed } from 'vue'; import { useStore } from 'pinia'; export default { setup() { const store = useStore(); const hasViewPage1Permission = computed(() => store.getters.hasPermission('viewPage1') ); const hasEditPage1Permission = computed(() => store.getters.hasPermission('editPage1') ); return { hasViewPage1Permission, hasEditPage1Permission, }; }, }; </script> ``` 在这个组件中,我们使用 `computed` 属性来获取当前用户是否有查看页面1和编辑页面1的权限。我们使用 `useStore` 方法来获取我们之前定义的 store。 在这个组件中,我们通过使用 `v-if` 指令来判断当前用户是否有相应的权限,如果有,就显示对应的内容。 这就是如何在 Vue3 中使用 Pinia 设置前端权限的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值