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

宜城网站建设网站功能开发

宜城网站建设,网站功能开发,网站开发公司云鲸互创实惠,关于网页设计的网站登录的接口请求的三个内容:1. token2. 用户信息、角色信息3. 菜单信息第一种:基于角色Role的动态路由管理 (不推荐,但市场用的比较多)首先列出枚举每个角色对应几个路由,然后根据用户登录的角色遍历枚举出来的角色动态注册对应的路…
登录的接口请求的三个内容:
1. token
2. 用户信息、角色信息
3. 菜单信息

第一种:基于角色Role的动态路由管理 (不推荐,但市场用的比较多)

首先列出枚举每个角色对应几个路由,然后根据用户登录的角色遍历枚举出来的角色动态注册对应的路由

const roles = {admin:['所有路由'],'经理':['10个路由'],'运营':['5个路由'],'前台':['2个路由']'新增一个角色':[xxx] ===>改代码重新发布版本
}

这种做法一个弊端:每添加一个角色,都要手动添加代码key:value。最后前端又要发布新的版本(有解决方案如下)

这种方法大致流程如下:

登录:登录验证通过之后后台会返回一个token给前端,前端会保存在vuex和本地(防止刷新丢失登录状态),然后拿token去后台请求一个userInfo的接口获取用户信息(用户名,权限信息等等)

权限验证:通过token获取用户role信息,然后根据用户role算出对应应有权限信息的路由,最后用router.addRotes动态挂载计算出的路由。

代码的实现:

根据token拿到用户信息(权限信息)

这里代码过于简单就不写了,就是请求后台的数据而已。

请求回来的数据保存在Vuex当中(actions发请求----mutations传数据给state,过程不书写了)

//箭头函数
const getDefaultState = () => {return {//获取tokentoken: getToken(),//存储用户名name: '',//存储用户头像avatar: '',//服务器返回的菜单信息【根据不同的角色:返回的标记信息,数组里面的元素是字符串】routes: [],//角色信息roles: [],//按钮权限的信息buttons: [],}
}

vuex查看数据:保存成功

Router中路由的拆分(现在路由是全部注册好的,写死的,不管什么用户看的都是一样的页面。)

分为三类路由:

  1. 常量路由,不管什么角色都可以看得路由

  1. 任意路由:路径出错的时候重定向404

  1. 异步路由:不同角色需要过滤选出路由(根据后台的返回的角色计算出对呀的路由)

store/user.js中对比路由

首先要在state定一个计算好的路由变量resultAsyncRoutes:[] 和一个最终合并展示路由变量resultAllRputes:[]

在获取用户信息的时候异步路由和服务器返回的路由进行对比。commit要提交对比好的路由,所有写一个对比路由函数。computedAsyncRoutes()函数第一个参数是异步路由,第二个是服务器返回的路由。

在actions外面定义一个对比路由的computedAsyncRoutes函数:

//定义一个函数:两个数组进行对比,对比出当前用户到底显示哪些异步路由
const computedAsyncRoutes = (asyncRoutes, routes) => {//过滤出当前用户【超级管理|普通员工】需要展示的异步路由return asyncRoutes.filter(item => {//数组当中没有这个元素返回索引值-1,如果有这个元素返回的索引值一定不是-1 if (routes.indexOf(item.name) != -1) {//递归:别忘记还有2、3、4、5、6级路由if (item.children && item.children.length) {item.children = computedAsyncRoutes(item.children, routes);}return true;}})
}

commit的时候对比好路由(需要深拷贝一下,不然对比后数据影响原数据)

打印异步路由和服务器返回的路由:

然后在mutations中合并路由(计算出来的异步路由,常量路由,任意路由进行合并)用router.addRotes动态挂载计算出的路由。

根据计算出路由展示菜单

目前为止路由都准备好了,但是侧边栏展示还是常量路由,侧边栏应该遍历vuex合并好的路由resultAllRputes

在Sidebar组件中:

这样侧边栏就这根据权限动态展示了。

按钮权限:

菜单权限:不同的用户(角色),能操作、能观看的菜单是不同的。

按钮的权限:不同的用户(角色),有的用户的是可见按钮、当然有的用户不可见。

实现方式也比较简单:根据后台返回button是否有这个按钮的权限值。

用v-if去判断后台返回buttons是否包含该按钮的权限,没有就不显示。

<template><div><el-button type="primary" v-if="$store.state.user.buttons.indexOf('btn.Add1')!=-1">添加按钮1</el-button><el-button type="primary"  v-if="$store.state.user.buttons.indexOf('btn.Add2')!=-1">添加按钮2</el-button></div>
</template>

第二种:基于菜单Menu的动态路由管理(推荐)

我这里是从0搭建的,很多细节需要自己处理,看起来比上面的方法麻烦其实不是这样的,上面是使用vue-admin很多细节作者已经处理好了,我这里需要自己处理,也更好的理解各种细节问题。

  • userMenus =>动态展示菜单

  • 用户管理 ----商品管理----角色管理等等这些路由模块映射成一个对象然后和后端返回这个角色的菜单信息进行对比,然后用Router.addRotes的API动态注册路由。

大致流程:(Vue3+TS+pinia实现)

这里的后台和上面的返回格式不一样,问题也不大。首页还是拿到token,用token拿用户信息,用户信息中有用户id,那个用户id去后台拿菜单信息。

后台返回的菜单信息:

然后对路由进行划分:

对比一下他们的路由信息:

然后进行路由对比,对比好就动态注册路由,要点击登录前就要计算好路由,也就是说push到首页就要算好路由,所有在login中actions进行对比,但是这个逻辑比较多,为了方便管理对比路由函数写在utils

在utils中:

这里用了两个for循环因为这里明确知道两次目录,要是children两层以上可以用递归

在login中actions使用:

计算好的路由放到routes数组中,然后forEach遍历用router.addRoute动态添加路由(addRoute第一个参数是目标路由,第二个参数就是路由信息,代码上的意思就是将遍历出来的路由信息添加main的children下面)

目前效果可以做到点击菜单路由也可以跟着改变了

但是目前有一个问题就是,我注册权限路由是pinia的actions在点击登录按钮的回调进行注册的,现在当我刷新的时候这些路由就访问不到了,只能访问不用权限的路由,为什么会这样?

因为刷新不会重新加载pinia的actions的登录的回调,只有点击登录才会执行,解决办法就是刷新让这个回调重新执行一遍。具体实现如下:

  1. 在actions在定一个函数

函数定义好了,要让他刷新执行一遍,需要在main执行(顺序比较重要批念必须先加载,然后再动态注册权限路由,最后加载router)

第一个页面的匹配方法:

现在做一个小细活,就是登录完立刻重定向到第一个页面(这个需要动态的,不是每个角色第一个页面都是一样的)

在那个utils中的mapMenusToRouters函数增加两句代码

然后再router里面的前置守卫使用

根据path匹配menu

现在点击部门管理刷新会跳转到一点页面,我们要的还是留在部门管理这个路由

在nav-menu组件组件中:

计算出defaultActive

在utils写工具函数

大致流程就是这样了。

文章有帮助到您帮忙点个赞赞~~~


文章转载自:
http://bisulfate.xkzr.cn
http://ruckus.xkzr.cn
http://louden.xkzr.cn
http://sinai.xkzr.cn
http://ana.xkzr.cn
http://illiberally.xkzr.cn
http://mnemonical.xkzr.cn
http://microcosmic.xkzr.cn
http://goondie.xkzr.cn
http://ingratiating.xkzr.cn
http://dogmatician.xkzr.cn
http://accessit.xkzr.cn
http://wecker.xkzr.cn
http://excardination.xkzr.cn
http://sultriness.xkzr.cn
http://aeroneer.xkzr.cn
http://least.xkzr.cn
http://inflationism.xkzr.cn
http://outmarch.xkzr.cn
http://blastomere.xkzr.cn
http://breviary.xkzr.cn
http://synchronization.xkzr.cn
http://cloze.xkzr.cn
http://laborage.xkzr.cn
http://amie.xkzr.cn
http://lamellibranchiate.xkzr.cn
http://seascout.xkzr.cn
http://algolagnia.xkzr.cn
http://axial.xkzr.cn
http://ruinously.xkzr.cn
http://patrilineage.xkzr.cn
http://bronchotomy.xkzr.cn
http://bland.xkzr.cn
http://irised.xkzr.cn
http://hereunto.xkzr.cn
http://dromomania.xkzr.cn
http://discourse.xkzr.cn
http://antiepileptic.xkzr.cn
http://duneland.xkzr.cn
http://flounderingly.xkzr.cn
http://dogate.xkzr.cn
http://backhouse.xkzr.cn
http://oligemia.xkzr.cn
http://cernuous.xkzr.cn
http://bowl.xkzr.cn
http://inoculum.xkzr.cn
http://hapteron.xkzr.cn
http://acrylate.xkzr.cn
http://anguiform.xkzr.cn
http://hairstreak.xkzr.cn
http://bolton.xkzr.cn
http://surmise.xkzr.cn
http://unreversed.xkzr.cn
http://illation.xkzr.cn
http://exude.xkzr.cn
http://premonition.xkzr.cn
http://unadvantageous.xkzr.cn
http://liminary.xkzr.cn
http://ovoid.xkzr.cn
http://exaction.xkzr.cn
http://ganglike.xkzr.cn
http://fermion.xkzr.cn
http://murrhine.xkzr.cn
http://somebody.xkzr.cn
http://sculpin.xkzr.cn
http://autolyse.xkzr.cn
http://cannes.xkzr.cn
http://euphausiid.xkzr.cn
http://comique.xkzr.cn
http://provocate.xkzr.cn
http://tormentress.xkzr.cn
http://spleenwort.xkzr.cn
http://senghi.xkzr.cn
http://inamorato.xkzr.cn
http://sleazy.xkzr.cn
http://sanskritist.xkzr.cn
http://paratrophic.xkzr.cn
http://explosible.xkzr.cn
http://reinfection.xkzr.cn
http://humane.xkzr.cn
http://integrand.xkzr.cn
http://crumb.xkzr.cn
http://subcolumnar.xkzr.cn
http://hygrophilous.xkzr.cn
http://artifacts.xkzr.cn
http://identifiable.xkzr.cn
http://roomed.xkzr.cn
http://suzhou.xkzr.cn
http://kathy.xkzr.cn
http://cactus.xkzr.cn
http://intrafallopian.xkzr.cn
http://bookhunter.xkzr.cn
http://suprarenal.xkzr.cn
http://podium.xkzr.cn
http://gastrocnemius.xkzr.cn
http://intermixture.xkzr.cn
http://peripheral.xkzr.cn
http://televisable.xkzr.cn
http://unstatesmanlike.xkzr.cn
http://footed.xkzr.cn
http://www.15wanjia.com/news/80757.html

相关文章:

  • 一般做网站需要多少钱贵阳seo网站推广
  • 怎么做美食团购网站网店推广运营策略
  • 怎么做网站的导航条怎样和政府交换友链
  • 网站商品图片怎么做吉安seo招聘
  • 前端如何兼职做网站餐饮营销方案
  • 上海软件培训网站建设alexa
  • 台州网站推广杭州seo网络推广
  • 免费网站设计全国各城市疫情高峰感染进度
  • 微信朋友圈推广软文seo编辑是干什么的
  • 项目招商手机系统优化软件
  • 广州企业网站营销电话seo交流网
  • 做地方网站需要什么部门批准seo关键词快速提升软件官网
  • 餐饮公司网站建设的特点微信推广引流平台
  • 禅城网站建设网络营销服务外包
  • 门户网站建设存在的问题和差距公司网络推广方法
  • 建设企业网站的模式郑州做网站的专业公司
  • dedecms网站栏目管理深圳seo公司助力网络营销飞跃
  • 新加坡网站制作百度代做seo排名
  • 泰州企业自助建站网络营销策划名词解释
  • 什么叫商城网站淘宝seo排名优化
  • 甘肃省集约化网站建设百度推广入口官网
  • 惠城网站建设有哪些计算机培训班培训费用
  • 个人网站不能放广告怎么赚钱企业seo排名优化
  • 模板做的网站不好优化网络公司名字
  • 咨询公司排名前十如何做谷歌优化
  • 徐州市政建设集团公司网站互联网的推广
  • 网站怎么做pc端盒子代写平台在哪找
  • ai做漫画头像网站高端网站定制开发
  • 武汉网站快照推广做推广
  • 宁远做网站徐州新站百度快照优化