当前位置: 首页 > news >正文

南京高端定制网站建设wordpress婚礼模板

南京高端定制网站建设,wordpress婚礼模板,cms203片,济南赢动网站建设优缺点 优点#xff1a; 不用后端帮助#xff0c;路由表维护在前端逻辑相对比较简单#xff0c;比较容易上手权限少的系统用前端鉴权更加方便 缺点#xff1a; 线上版本每次修改权限页面,都需要重新打包项目大型项目不适用如果需要在页面中增加角色并且控制可以访问的页… 优缺点 优点 不用后端帮助路由表维护在前端逻辑相对比较简单比较容易上手权限少的系统用前端鉴权更加方便 缺点 线上版本每次修改权限页面,都需要重新打包项目大型项目不适用如果需要在页面中增加角色并且控制可以访问的页面则不能用前端鉴权 具体思路 1、前端定义静态路由和动态路由创建vue实例的时候vue-router挂载静态路由登录等不需要权限的页面 2、登录时获取用户信息存入vuex中存储token 3、在路由拦截器中通过token去获取用户角色拿角色去获取所有可访问的路由 4、调用router.addrouters(store.state.addRouters)添加可访问的路由 5、退出时清空用户信息清空角色清空路由 步骤一前端定义静态路由和动态路由 router/index.js import Vue from vue import VueRouter from vue-router import Layout from /layoutVue.use(VueRouter)// 解决重复点击路由报错的BUG // 下面这段代码主要解决这个问题 Uncaught (in promise) Error: Redirected when going from /login to /index via a navigation guard. const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch((err) err) }// 定义好静态路由 export const constantRoutes [{path: /login,name: login,component: () import(../views/login),hidden: true,}, ]// 定义动态路由,以及每个页面对应的roles(写在meta中不写代表都可以访问) export const asyncRoutes [{id: 1,name: /,path: /,component: Layout,redirect: /index,hidden: false,children: [{name: index,path: /index,meta: { title: index },component: () import(/views/index),},],},{id: 2,name: /form,path: /form,component: Layout,redirect: /form/index,hidden: false,children: [{name: /form/index,path: /form/index,meta: { title: form },component: () import(/views/form),},],},{id: 3,name: /example,path: /example,component: Layout,redirect: /example/tree,meta: { title: example },hidden: false,children: [{name: /tree,path: /example/tree,meta: { title: tree },component: () import(/views/tree),},{name: /copy,path: /example/copy,meta: { title: copy },component: () import(/views/tree/copy),},],},{id: 4,name: /table,path: /table,component: Layout,redirect: /table/index,hidden: false,meta: { roles: [admin] },children: [{name: /table/index,path: /table/index,meta: { title: table, roles: [admin] },component: () import(/views/table),},],},{id: 5,name: /admin,path: /admin,component: Layout,redirect: /admin/index,hidden: false,meta: { roles: [admin] },children: [{name: /admin/index,path: /admin/index,meta: { title: admin, roles: [admin] },component: () import(/views/admin),},],},{id: 6,name: /people,path: /people,component: Layout,redirect: /people/index,hidden: false,meta: { roles: [admin, common_user] },children: [{name: /people/index,path: /people/index,meta: { title: people, roles: [admin, common_user] },component: () import(/views/people),},],},{id: 7,name: /404,path: /404,component: () import(/views/404),},// 注意404页面要放到最后{ path: *, redirect: /404, hidden: true }, ]const router new VueRouter({mode: history,base: process.env.BASE_URL,routes: constantRoutes, })export default router 这里我们根据 vue-router官方推荐 的方法通过meta标签来标示改页面能访问的权限有哪些。如meta: { role: [‘admin’,‘super_editor’] }表示该页面只有admin和超级编辑才能有资格进入。 注意事项这里有一个需要非常注意的地方就是 404 页面一定要最后加载如果放在constantRoutes一同声明了404后面的所以页面都会被拦截到404 步骤二登录时获取用户信息存入vuex中存储token login/index.vue methods: {login () {this.$refs.userForm.validate((valid) {if (valid) {// 模拟登录接口去请求用户数据setTimeout(() {// 这里的res就是模拟后台返回的用户数据不包含用户角色一般角色是由单独的一个接口返回const res dynamicUserData.filter((item) item.username this.user.username)[0]console.log(res)// 存储用户的信息及token到vuex,并做sessionStorage持久化处理this.$store.commit(User/saveUserInfo, res)Message({ type: success, message: 登录成功, showClose: true, duration: 3000 })this.$router.push({ path: /index })}, 1000)} else return false})}}附vuex持久化处理 import Vue from vue import Vuex from vuex import User from ./modules/user import permission from ./modules/permission import createPersistedState from vuex-persistedstate Vue.use(Vuex)export default new Vuex.Store({state: {},mutations: {},actions: {},modules: {User,permission,},plugins: [createPersistedState({storage: window.sessionStorage, // 可选sessionStorage localStoragereducer(val) {return {User: val.User,}},}),], })步骤【三四】在路由拦截器中通过token去获取用户角色拿角色去获取所有可访问的路由调用router.addrouters(store.state.addRouters)添加可访问的路由 路由钩子逻辑 是否为白名单页面是 直接进入不是 判断是否有token无token跳转到login登录页有token 判断用户是否有角色权限表有权限表直接进入无权限表调接口获取用户角色并存储到vuex根据返回的角色和路由表每个页面的需要的权限对比生成可访问的路由表使用router.addRouters()添加路由路由导航守卫 import router from ./index import NProgress from nprogress // progress bar import store from /store import menu from /mock/menu.jsNProgress.configure({ showSpinner: false }) // NProgress Configuration// 白名单页面直接进入 const whiteList [/login]router.beforeEach((to, from, next) {NProgress.start()// 白名单页面不管是否有token是否登录都直接进入if (whiteList.indexOf(to.path) ! -1) {next()return false}// 有token代表了有用户信息但是不确定有没有角色权限数组if (store.state.User.token) {// 判断当前用户是否有角色权限数组 是登录状态则一定有路由直接放行不是登录状态则去获取路由菜单登录// 刷新时hasRoles会重置为false重新去获取 用户的角色列表const hasRoles store.state.permission.roles store.state.permission.roles.length 0if (!hasRoles) {setTimeout(async () {const roles menu.filter((item) item.token store.state.User.token)[0].roles// 将该角色权限数组存储到vuex中store.commit(permission/setRoles, roles)// 根据返回的角色信息去过滤异步路由中该角色可访问的页面const accessRoutes await store.dispatch(permission/generateRoutes, roles)// dynamically add accessible routesrouter.addRoutes(accessRoutes)// hack方法 router.addRoutes之后的next()可能会失效因为可能next()的时候路由并没有完全add完成 next(to)解决next({ ...to, replace: true })}, 500)} else {next() //当有用户权限的时候说明所有可访问路由已生成 如访问没权限的全面会自动进入404页面}} else {next({ path: /login })} })router.afterEach(() {// finish progress barNProgress.done() }) vuex中做的事为 将定义好的动态路由 通过 角色权限数组后台返回的进行过滤过滤出用户有的路由然后将该过滤后的路由添加到静态路由后面去 store/permission.js import { asyncRoutes, constantRoutes } from /router /*** Filter asynchronous routing tables by recursion* param routes asyncRoutes* param roles*/ export function filterAsyncRoutes(routes, roles) {const res []routes.forEach(route {const tmp { ...route }if (hasPermission(roles, tmp)) {if (tmp.children) {tmp.children filterAsyncRoutes(tmp.children, roles)}res.push(tmp)}})return res }function hasPermission(roles, route) {console.log(roles)console.log(route)if (route.meta route.meta.roles) {console.log(roles.some(role route.meta.roles.includes(role)))return roles.some(role route.meta.roles.includes(role))} else {return true} }const state {roles: [],routes: [],addRoutes: [], } const mutations {setRoles(state, val) {state.roles val},SET_ROUTES: (state, routes) {state.addRoutes routesstate.routes constantRoutes.concat(routes)}, } const actions {generateRoutes({ commit }, roles) {return new Promise(resolve {let accessedRoutesif (roles.includes(admin)) { // admin直接添加所有权限accessedRoutes asyncRoutes || []} else {accessedRoutes filterAsyncRoutes(asyncRoutes, roles)}commit(SET_ROUTES, accessedRoutes)resolve(accessedRoutes)})}, } export default {namespaced: true,state,mutations,actions, }步骤四退出时清空用户信息清空角色清空路由 methods: {// 退出登录handleLogout() {window.localStorage.removeItem(token)// 清除用户信息this.$store.commit(User/removeUserInfo)// 清除角色权限列表this.$store.commit(permission/setRoles, [])// 清除角色权限数组this.$store.commit(permission/SET_ROUTES, [])Message({type: success,message: 退出登录,showClose: true,duration: 3000,})this.$router.push({ path: /login })},}希望能帮到你 文章参考 花裤衩大佬花裤衩大佬 本文代码github 求 star
http://www.dnsts.com.cn/news/207442.html

相关文章:

  • 免费的推广网站有哪些WordPress博客Vieu主题破解
  • 建站公司dreamware做网站
  • 怎么搭建本地网站erp系统软件免费版
  • 南京网站建设案例做的好的手机网站
  • 做网站领券收佣金网站页头制作
  • 网站源码绑定域名海南钢网架公司
  • 网站页面架构网站上怎样做轮播图
  • 鄂州网站建设价格免费打开的网站
  • 兰州网站开发哪里可以做做网站的设计文档怎么做
  • 网站建设定制开发推广网络营销实务教案
  • 丹阳建设局网站h5建站是什么
  • 一级a做爰片免费网站体验区沈阳专业的网站设计公司
  • 重庆网站建设公司徐州网站建设推广
  • 智能建站平台z网站要不要备案
  • 高端企业网站设计网站建设后的效果评估
  • 网站建设制作公司地址能下载的网站
  • 步步高学习机进网站怎么做建设银行登录网站
  • 无锡企业建站模板网站开发具体是干什么的
  • 广州口碑好的网站建设python开发wordpress
  • app网站建设制作怎样建立网站 优帮云
  • 浙江建设职业技术学院门户网站wordpress瀑布流代码
  • 网站手机端做排名软件设计师好考吗
  • app网站开发后台处理遵义网站seo
  • 石家庄p2p网站开发二元期权网站建设
  • 网站建设商业计划书模板范文职高网站建设知识点
  • 网站空间商排名网站创建流程
  • 湖南株洲网站建设wordpress接口密码
  • 外贸 网站推广计划三栏wordpress 主题
  • 建设一个网站需要什么设备网络营销媒体有哪些
  • 怎样建设档案馆网站免费 wordpress主题