范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

vue项目权限管理

  首先,权限管理 般需求是两个: 权限和按钮权限。 权限管理 般需求是 权限和按钮权限的管理  具体实现的时候分后端和前端两种 案:
  前端 案会把所有路由信息在前端配置,通过路由守卫要求 户登录, 户登录后根据 过滤出路由表。 如我会配置 个 asyncRoutes 数组,需要认证的 在其路由的 meta 中添加 个 roles 字段,等获取 户 之后取两者的交集,若结果不为空则说明可以访问。此过滤过程结束,剩下的路由就是该 户能访问的 ,最后通过 router.addRoutes(accessRoutes)  式动态添加路由即可。
  后端 案会把所有 路由信息存在数据库中, 户登录的时候根据其 查询得到其能访问的所有 路由信息返回给前端,前端再通过 addRoutes 动态添加路由信息。
  按钮权限的控制通常会实现 个指令,例如 v-permission ,将按钮要求 通过值传给v-permission指令,在指令的 moutned 钩 中可以判断当前 户 和按钮是否存在交集,有则保留按钮, 则移除按钮。 纯前端 案的优点是实现简单,不需要额外权限管理 ,但是维护起来问题 较 ,有新的 和 需求 就要修改前端代码重新打包部署;服务端 案就不存在这个问题,通过专 的 和权限管理 ,配置  和按钮权限信息到数据库,应 每次登陆时获取的都是最新的路由信息,可谓 劳永逸!
  路由守卫  permission.js :import router from "./router" import store from "./store" import { Message } from "element-ui" import NProgress from "nprogress" // progress bar import "nprogress/nprogress.css" // progress bar style import { getToken } from "@/utils/auth" // get token from cookie import getPageTitle from "@/utils/get-page-title"  NProgress.configure({ showSpinner: false }) // NProgress Configuration  const whiteList = ["/login", "/auth-redirect"] // no redirect whitelist  router.beforeEach(async(to, from, next) => {   // start progress bar   NProgress.start()    // set page title   document.title = getPageTitle(to.meta.title)    // determine whether the user has logged in   const hasToken = getToken()    if (hasToken) {     if (to.path === "/login") {       // if is logged in, redirect to the home page       next({ path: "/" })       NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939     } else {       // determine whether the user has obtained his permission roles through getInfo       const hasRoles = store.getters.roles && store.getters.roles.length > 0       if (hasRoles) {         next()       } else {         try {           // get user info           // note: roles must be a object array! such as: ["admin"] or ,["developer","editor"]           const { roles } = await store.dispatch("user/getInfo")            // generate accessible routes map based on roles           const accessRoutes = await store.dispatch("permission/generateRoutes", roles)            // dynamically add accessible routes           router.addRoutes(accessRoutes)            // hack method to ensure that addRoutes is complete           // set the replace: true, so the navigation will not leave a history record           next({ ...to, replace: true })         } catch (error) {           // remove token and go to login page to re-login           await store.dispatch("user/resetToken")           Message.error(error || "Has Error")           next(`/login?redirect=${to.path}`)           NProgress.done()         }       }     }   } else {     /* has no token*/      if (whiteList.indexOf(to.path) !== -1) {       // in the free login whitelist, go directly       next()     } else {       // other pages that do not have permission to access are redirected to the login page.       next(`/login?redirect=${to.path}`)       NProgress.done()     }   } })  router.afterEach(() => {   // finish progress bar   NProgress.done() }) 复制代码
  路由 成##  permission.js :import { asyncRoutes, constantRoutes } from "@/router"  /**  * Use meta.role to determine if the current user has permission  * @param roles  * @param route  */ function hasPermission(roles, route) {   if (route.meta && route.meta.roles) {     return roles.some(role => route.meta.roles.includes(role))   } else {     return true   } }  /**  * 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 }  const state = {   routes: [],   addRoutes: [] }  const mutations = {   SET_ROUTES: (state, routes) => {     state.addRoutes = routes     state.routes = constantRoutes.concat(routes)   } }  const actions = {   generateRoutes({ commit }, roles) {     return new Promise(resolve => {       let accessedRoutes       if (roles.includes("admin")) {         accessedRoutes = asyncRoutes || []       } else {         accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)       }       commit("SET_ROUTES", accessedRoutes)       resolve(accessedRoutes)     })   } }  export default {   namespaced: true,   state,   mutations,   actions } 复制代码
  动态追加路由##  permission.js :import router from "./router" import store from "./store" import { Message } from "element-ui" import NProgress from "nprogress" // progress bar import "nprogress/nprogress.css" // progress bar style import { getToken } from "@/utils/auth" // get token from cookie import getPageTitle from "@/utils/get-page-title"  NProgress.configure({ showSpinner: false }) // NProgress Configuration  const whiteList = ["/login", "/auth-redirect"] // no redirect whitelist  router.beforeEach(async(to, from, next) => {   // start progress bar   NProgress.start()    // set page title   document.title = getPageTitle(to.meta.title)    // determine whether the user has logged in   const hasToken = getToken()    if (hasToken) {     if (to.path === "/login") {       // if is logged in, redirect to the home page       next({ path: "/" })       NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939     } else {       // determine whether the user has obtained his permission roles through getInfo       const hasRoles = store.getters.roles && store.getters.roles.length > 0       if (hasRoles) {         next()       } else {         try {           // get user info           // note: roles must be a object array! such as: ["admin"] or ,["developer","editor"]           const { roles } = await store.dispatch("user/getInfo")            // generate accessible routes map based on roles           const accessRoutes = await store.dispatch("permission/generateRoutes", roles)            // dynamically add accessible routes           router.addRoutes(accessRoutes)            // hack method to ensure that addRoutes is complete           // set the replace: true, so the navigation will not leave a history record           next({ ...to, replace: true })         } catch (error) {           // remove token and go to login page to re-login           await store.dispatch("user/resetToken")           Message.error(error || "Has Error")           next(`/login?redirect=${to.path}`)           NProgress.done()         }       }     }   } else {     /* has no token*/      if (whiteList.indexOf(to.path) !== -1) {       // in the free login whitelist, go directly       next()     } else {       // other pages that do not have permission to access are redirected to the login page.       next(`/login?redirect=${to.path}`)       NProgress.done()     }   } })  router.afterEach(() => {   // finish progress bar   NProgress.done() }) 复制代码
  服务端返回的路由信息如何添加到路由器中? // 前端组件名和组件映射表 const map = {   // xx: require("@/views/xx.vue").default // 同步的 式   xx: () => import("@/views/xx.vue") // 异步的 式  }  // 服务端返回的 asyncRoutes  const asyncRoutes = [   { path: "/xx", component: "xx", ... }  ]   // 遍历asyncRoutes,将component替换为map[component] function mapComponent(asyncRoutes) {   asyncRoutes.forEach(route => {     route.component = map[route.component];     if(route.children) {       route.children.map(child => mapComponent(child))     }   })  }  mapComponent(asyncRoutes)

京东6月1日手机销量排行公布苹果iPhone12单品榜第一IT之家6月2日消息618大战于6月1日正式开启,昨日各大手机厂商都公布了销量战报。今日,京东公布了6月1日手机销量的总排行。数据显示,6月1日,小米品牌的手机销量位列第一,苹果第为什么说每个软件工程师,都该懂大数据技术?此文章转自乐字节关于大数据,有句话说的很好未来的商业竞争,就是数据的竞争。2016年,Google的AlphaGo横空出世,在人类曾以为计算机无法跨越的围棋领域,以41大胜世界顶级马斯克对比特币心碎特斯拉经营不佳卖出4万个比特币概率增加吴说作者谈叔本期编辑ColinWu今年初,埃隆马斯克突然宣布特斯拉买了15亿美金的比特币,使得加密货币在更大程度上出圈,毕竟身为首富,马斯克具有非同一般的号召力与影响力。随后,特斯微软下一代Windows将于6月24日发布或有重大改变CNMO新闻微软上个月进行了最新Windows10的更新,改动相当有限。但如果是微软下一代Windows呢?改变会不会很大?最新消息显示,微软已宣布,公司将于6月24日发布下一代W2200万豪宅留下梁孟松,中芯国际蓄势待发,蒋尚义也助力新工艺在国产芯片界有一个人,他的地位举足轻重。作为曾经台积电的重要人物之一,如今已成为中芯国际的带头者,不仅掌握了国内先进的芯片制程,还让我们从28nm成功跨越到了14nm。这位芯片界的超威超导石墨烯电池掀起行业技术进步浪潮行驶里程10万里产品质保24个月消费日报网财经讯日前,位于浙江长兴的新能源小镇异常热闹。一场由中国500强企业超威集团举行的新品发布会,吸引了众多社会大众的目光。会上,超威发布了一Saietta集团展示轮毂电机技术蔚来汽车成立动力科技公司1hrSaietta轮毂电机技术展示电动汽车获得新技术Saietta集团展示了一系列新的轮毂电机技术。新的电动机技术旨在满足城市内的需求以及其他智能移动平台。总部位于英国的Saie4352毫安时,iPhone13系列的续航要超越安卓了?编者按在iPhone12系列上,苹果终于解决了其两大顽疾中的一个,那就是信号问题,为了iPhone12系列上的基带,苹果甚至不惜和高通提前和解,为的是能够获得高通的5G基带。自此,麒麟9000芯片供应不足是造成华为P50发布的重要原因吗?为了国人信息不被美国监控,国家应该要求国人必须用鸿蒙系统,特别是军人,公务员,国企事业单位人员用鸿蒙系统的手机!同时建议要求国产手机必须都适配鸿蒙系统,支持国产系统!都号称P50了为什么头条里的兼职,总是没直接告诉你是什么兼职,都要私信呢?给自己拉下线呢偷笑1。我能告诉你,那都是大忽悠,那都是大骗子。他告诉你的兼职往往都是不好的东西。2。目前手机上可靠的兼职,只有抖音极速版快手极速版今日头条极速版。这些极速版,需要你关注特斯拉法务部又开新账号未发内容,私信警告自媒体文懂车帝原创王茸懂车帝原创行业近日,特斯拉已在多个平台开设名为特斯拉法务部的账号。首先开通的是特斯拉法务部官方微博账号,微博简介是独立思考明辨是非。截至目前账号有7563个粉丝,暂
新能源车提升续航里程,不只有811和刀片这两条路在行业内有一种主流的声音,纯电动车型的续航里程达到500km以上就够用了,再提升续航就是浪费。但是如果你真正开过电动车,你就会对续航有不一样的认识,标称的NEDC续航里程,在常温状有没有升级成5G网络的手机用户,使用的怎么样?现在好像不需要办理5G套餐,只要换成5G手机就可以使用5G网络了,反正我没有办理5G套餐,电信就给我自动开通了5G功能,同事的移动号码也是自动开通的5G功能,联通那边问了一下基本上iOS15再曝光,这些功能真的很实用距离WWDC2021全球开发者大会越来越近了,关于iOS15系统的爆料也越来越多。和iPhone一样,iOS系统每年只更新一次大版本。虽然更新频率不高,每次更新所受到的关注度却无人miniLED是过渡技术?iPadPro的屏幕意味着什么4月底,让不少人翘首以待的科技春晚2021苹果春季新品发布会如期举行。虽然发布会的亮点很多,但对于手机用户来说,最值得关注的可能就是新的12。9英寸iPadPro了。新款12。9英云南移动携手华为,解决了5G网络中的一大难题都是5G网络,为什么你网速比我的快呢?这涉及到一个非常重要的技术问题。我们来一探究竟!近日,云南移动联合华为在滇池国际会展中心,基于2。6GHz组网,完成国内首个5GDLCoMP(观看距离4米的话可以买多大的液晶电视?有何科学参考标准?观看距离4米的话可以买多大的液晶电视?有何科学参考标准?电视的观看距离重要的参考标准是电视分辨率和电视的尺寸了。正常情况观看距离越远选择越大尺寸的屏幕的电视观看体验会越好,而电视的华为麒麟970处理器ai智能在哪里?欢迎在今日头条和悟空问答上点击右上角关注太平洋电脑网,更多精彩资讯等着您。首先你要理解人工智能是什么,才能很好地理解人工智能芯片。人工智能(ArtificialIntelligen(新华热评)网约车平台请给公众一个解释来源新华网新华社合肥5月6日电题网约车平台请给公众一个解释新华社记者戴威胡锐近日,部分网约车平台隐瞒高额抽成的新闻被曝出,引发网友热议。乘客反映打车越来越贵,司机感叹挣钱越来越难。网约车平台乘客打车贵司机挣钱难,抽成甚至达50新华社合肥5月6日电题网约车平台请给公众一个解释新华社记者戴威胡锐近日,部分网约车平台隐瞒高额抽成的新闻被曝出,引发网友热议。乘客反映打车越来越贵,司机感叹挣钱越来越难。本该让出行快评丨网约车平台抽成高不高,讨论不妨深入一些不管如何,让平台抽成比例成为阳光下的计算,这是网约车平台必须完成的一个环节。近日,据新华社报道,一些网约车平台抽成比例能达到25甚至更高,而司机和乘客对每一单的抽成比例计算方式毫不小鹏汽车4月共交付5147台,同比增长285小鹏P7并未受到特斯拉Model3的冲击。日前,小鹏汽车官方公布了其4月的交付量成绩单,今年4月总交付量为5147台,较去年同期大增285,其中,明星车型小鹏P7交付量2995台,