前后端分离实践:基于vue实现网站前台的权限管理

news/2024/5/10 8:26:51/文章来源:https://blog.csdn.net/weixin_34357962/article/details/93020315

LG


Javascript做为当下的热门语言,用途很广泛,从前端到后端处处可见其存在,该技术如今在我们项目内部也大量使用来开发诸如CMS系统以及其他其他一些数据分析系统的前端页面,为此个人非常感兴趣并将其作为帽子卡的扩展内容来进行课余学习。


Javascript框架鳞次栉比,但基本原理大致相同,因此选用国内人开发的vue.js进行一个初步的尝试。学习vue.js也一周多的时间了,说起vue的主要用法,无外乎Declarative Rendering、Component System、Client-side Routing、Vue-resource、Axios以及视项目大小而决定是否使用的Vuex,学习vue事小,主要转变思维,面向前后端分离的组件式web开发才是真正想去实践的。


正好我的个人网站CodeSheep最近要开发后台管理,因此正好用vue这一套来实现了一下。说到后台管理,绕不开的问题就是权限的管理。既然想实践前后端分离这种思想,因此后台管理的所有web前端的东西应该独立由前端完成,这其中就包括很重要的由前端来根据权限进行相关东西的控制。我们想要做到的是:不同的权限对应着不同的路由,同时页面侧边栏也应该根据不同的权限,来异步生成对应的菜单,讲白了就是后台管理时不同权限的用户其看到的界面菜单是不一样的,因此有了这里实现登录和权限验证的一套流程。

##具体实现
###1、点击“登录”按钮触发登录事件

this.$store.dispatch('LoginByEmail', this.loginForm).then(() => {this.$router.push({ path: '/' }); //登录成功之后重定向到首页
}).catch(err => {this.$message.error(err); //登录失败提示错误
});

其中异步触发的actions LoginByEmail的处理内容如下:

LoginByEmail ({ commit }, userInfo) {const email = userInfo.email.trim()return new Promise((resolve, reject) => {loginByEmail(email, userInfo.password).then(response => {const data = response.datasetToken(response.data.token)commit('SET_TOKEN', data.token)resolve()}).catch(error => {reject(error)})})}

很容易看出想做的是将从服务器端拿到的token(唯一标示用户身份)放到浏览器本地Cookie中去

###2、全局钩子router.beforeEach中拦截路由
这一步是核心,具体处理流程示意如下:

路由拦截处理流程

具体代码如下:

router.beforeEach((to, from, next) => {if (getToken()) {  // 判断是否取到tokenif (to.path === '/login') {next({ path: '/' })} else {if (store.getters.roles.length === 0) {  // 判断当前用户是否已获取完user_info信息store.dispatch('GetInfo').then(res => { // 获取user_infoconst roles = res.data.rolestore.dispatch('GenerateRoutes', { roles }).then(() => { // 生成可访问的路由表router.addRoutes(store.getters.addRouters)  // 动态添加可访问路由表next({ ...to }) // 放行路由})}).catch(() => {store.dispatch('FedLogOut').then(() => {next({ path: '/login' })})})} else {next() // 放行该路由}}} else {if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单里的路径,继续让其访问next()} else { // 其他不在白名单里的路径全部让其重定向到登录页面!next('/login')alert('not in white list, now go to the login page')}}
})

流程图中几个重要步骤解释一下:

  • 判断前端是否取到了token令牌:getToken()

    操作很简单,主要是从Cookie中获取,看token是不是已经拿到了:

    export function getToken () {
    return Cookies.get(TokenKey)
    }
  • vuex异步操作store.dispatch('GetInfo'):获取用户信息

    GetInfo ({ commit, state }) {return new Promise((resolve, reject) => {getInfo(state.token).then(response => {const data = response.dataconsole.log(data)commit('SET_ROLES', data.role)commit('SET_NAME', data.name)resolve(response)}).catch(error => {reject(error)})})
    }

    操作也很简单,用一个get的restful api从服务器获取用户的角色和名字

  • vuex异步操作store.dispatch('GenerateRoutes', { roles }):根据不同的roles来生成不同的前台路由
    GenerateRoutes ({ commit }, data) {return new Promise(resolve => {const { roles } = datalet accessedRoutersif (roles.indexOf('admin') >= 0) {accessedRouters = asyncRouter} else {accessedRouters = filterAsyncRouter(asyncRouter, roles)}commit('SET_ROUTERS', accessedRouters)resolve()})
    }

    从代码中可以看出,我这是只区分了管理员角色admin和其他普通用户(即非Aadmin两种权限)

该系列的实践后续还将尝试更多,将会一一撰帖成文,我也是个初学者,路漫漫而求索之。。。


后记

作者更多的原创文章在此


转载于:https://blog.51cto.com/13428080/2085410

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_749478.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空间如何装php,网站空间如何安装phpmyadmin

个人空间上安装php教程myadmin方法当然你有mysql教程数据库教程。 首先 下载 一份最新版的phpmyadmin mysql管理器。 解压后得到一个phpmyadmin的目录(你可以改名) 找到目录里的config.inc.php文件,打开 找到 $cfg[pmaabsoluteuri] 修改你将当然你有mysql数据库。首…

php sql网站模板,php: mssql

————Movesinternalrowpointermssql_execute—ExecutesastoredprocedureonaMSSQLserverdatabasemssql_fetch_array—Fetcharesultrowasanassociativearray,anumericarray,orbothmssql_fetch_assoc—Returnsanassociativearrayofthecurrentrowintheresultmssql_fetch_batch—…

在Microsoft Office SharePoint Server 2007中使用“我的网站”

12.7 “我的网站”是用于集中管理和存储您的文档、内容、链接以及联系人的个人网站。组织中的其他用户可以通过“我的网站”查找关于您和您的技能及兴趣的信息。内容提供商可以使用“我的网站”来自定义显示给用户的信息。 12.7.1 “我的网站”概述 “我的网站”可以提供&#…

***掉自已公司的网站,留下记录

因这段时间公司的网站被黑第2次了,引起了我的注意(其实是前段时间心态不好没理这个事),今天我就分析了一下WEB日志,发现了托管主机的一个问题。自已测试黑掉了。准备给香港的那家公司吵下架,看看能不能索赔…

常用SEO查询工具

SEO工作者经常需要一些SEO工具的辅助,比如网站收录查询、PR查询等等,以便节省自己的时间,让SEO变得更加轻松。那么,常用的SEO工具都有哪些呢?今天就介绍一些常用的SEO工具网址,并将其进行分类,希…

大型互联网站解决高并发的常见策略

一个运营的系统在正式上线后将会遇到各种层级的高并发请求,因此我们必须对此做出相应的策略和技术解决方案,首先我们需要认清系统的高并发由3个层面导致: 1. 传输层 大量用户对系统请求后,将会造成网络带宽和Web服务器的I/O瓶颈。…

Web 性能优化: 图片优化让网站大小减少 62%

2019独角兽企业重金招聘Python工程师标准>>> 摘要: 压缩各种格式的图片。 原文:Web 性能优化: 图片优化让网站大小减少 62%作者:前端小智Fundebug经授权转载,版权归原作者所有。 这是 Web 性能优化的第二篇…

C# 创建网站 无法启动与停止的问题

2019独角兽企业重金招聘Python工程师标准>>> 这个问题郁闷了近一天。这两天写Web网站安装,网上找到相关的创建网站代码有很多。 这里郁闷的问题是:用DirectoryEntry创建完网站后,可以响应删除,却无法停止与启动。 一当…

Piwik 1.9.1 发布,网站访问统计系统

Piwik 1.9.1 发布了,该版本修复了前几天刚发布的 1.9 的一些小 bug。 Piwik是一套基于PhpMySQL技术构建的开源网站访问统计系统,前身是phpMyVisites。Piwik可以给你详细的统计信息,比如网页 浏览人数, 访问最多的页面, 搜索引擎关键词等等&am…

《特别推荐》10套精美的免费网站后台管理系统模板

大部分的 Web 应用和动态网站都需要一个后台管理系统用于管理前台界面的信息展示以及用户信息。管理后台的设计虽然不像前台界面那样要求设计精美,但是也需要有清晰的管理模块划分,这样使用后台管理系统的人员才能够方便的进行操作和管理。下面收集了十款…

博客网站设置SSL证书

刚得到的域名是没有安全证书的,在地址栏https处有警告,在cPanel主域中也会提示有风险,因此我们需要给我们的网站设置SSL证书(b站视频教程) 1.登陆SSLforfree官方网站 登陆https://zerossl.com/,然后输入自…

python实用网站,查找合适的第三方库pip安装

链接: Find, install and publish Python packages with the Python Package Index 搜索并查找历史版本,以及复制pip指令,安装第三方库

python实用网站,查找程序报错的解决方法

程序报错信息: OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized错误提示 链接: 访问stackoverflow 搜索结果: 有效回答: 解决方案: import os os.environ["KMP_DUPLICATE_…

第一个爬虫项目-爬取唯美小姐姐网站

爬取唯美小姐姐网站 链接: 源代码文件下载地址 展示 源代码 import requests import re import os import time# 伪装 用于可以伪装成浏览器。 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.1…

20个学习CSS的绝佳网站——让你从入门到精通

CSS(层叠样式表)是一种简单的设计语言,能够将页面变漂亮这回事儿变的简单化。在HTML和XHTML中设定页面的样式,这是最常用的应用。但也可以应用于 XML类的文档,包括SVG和XUL。他负责管理网页的设计和外观。使用CSS&…

20个将JavaScript推到极致的网站

对于浏览器上的开发者来说,2011年又是相当精彩的一年。web开发者Phil Hawksworth在这篇文章中总结了web 上经典的JavaScript用法。 那些喜欢冒险体验前沿技术的开发者现在应该会非常开心。浏览器正变得越来越强大,上面有各种丰富的功能可以供开发者选择&…

编程学习好去处:35 个快速学习的编程网站

每个人都暗自地渴望成为一个创业者。现今技术型新兴产业和机会正值繁荣时期,我看到网上创业的公司比线下创业的公司多很多。技术创业,正如其名,意味着你的生意通常不是在线下进行的。像这种类型的创业,创业者应该懂得编码和设计工…

Ubuntu下Nginx做负载实现高性能WEB服务器3—PHP网站的部署和时间同步

接上篇文章,先上架构图 1.环境 网络拓扑 2.部署 此处以天空网络免费的视频网站搭建为例。 2.1 在外网代理机器(192.168.80.8)上下载网站源码包 rootubuntu:~# wget http://skyuc-download.stor.sinaapp.com/SKYUC_3.4.1_Free_php5.3.tar.bz2 …

zabbix博文和网站

大体思路过程 yum源安装zabbix 安装比较简单,网上资料也普遍是这种安装方法。缺点是卸载的时候需要删一堆文件和文件夹,容易出错。docker安装zabbix 掌握了Docker安装方式比Yum源安装zabbix省心,而且完全做到与宿主机的解耦,卸…

20个创意的的励志时尚电子网站设计推荐

时尚电子商务网站对设计师们来说可以成为一个优秀的设计灵感来源。有吸引力的设计能够吸引更多的游客,产品的销售也就增加了。时尚在我们在每天的生活当中需要追求的。例如:设计像野兔风格的穿衣风格,搭配各样的颜色色调体现了时尚和履行消费…