vue权限控制,服务器安装

2019-09-14 10:15栏目:公司领导
TAG:

从科研角度谈“如何实现基于机器学习的智能运维”,科研

      清华大学计算机系副教授 裴丹于运维自动化专场发表了题为《基于机器学习的智能运维》的演讲,现场分享了基于机器学习的智能运维目前面临的挑战和解决思路。以下为演讲实录,今天大概内容包括智能运维背景介绍、如何从基于规则上升到基于学习

      首先会做一个背景的介绍;为什么清华大学的老师做的科研跟运维有那么多关系?智能运维现在已经有一个很清晰的趋势,从基于规则的智能运维自动化逐渐转为基于机器学习了。再介绍几个跟百度的运维部门搜索部门进行合作的案例;最后,还要讲一下挑战与思路。

一、智能运维背景介绍

      谈一下参加这次大会的感受,昨天各位讲师们的报告,特别是今天早上几位讲师的报告特别精彩,讲到了在生产一线过程中遇到的各种挑战以及大家的实践和经验,我们又加了运维的群,对于像我这样在科研领域做运维相关科研的工作者来说,感觉找到了组织。

      介绍一下我的经验,特别是跟海峰老师开场的时候,讲的一个概念是相关的。海峰老师提到说我们做运维很苦,正好我大概在去年这个时候,我在百度的运维部门,讲了一下做运维如何做得更高大上一些,我的题目叫做《我的运维之路》。我们先简单看一下,我个人学术上的官方简历。

      我读了博士,然后在AT&T研究院实习,AT&T研究院前身是贝尔实验室的一部分,这里面大概有200个博士,有C发明者、防火墙之父,当然我其实没有怎么见到过他们,但是办公室是在一起的。之后在里面做了大概6年时间,发了不少论文,得了一些奖,发表了23项运维相关的专利。然后回清华做了不少科研,这是我的官方简历。

      实际上我在做什么事情?我就是一个运维人员。在一个30万人的大公司里面做运维,当然主要是通过大数据分析的方法。我读博期间跟美国各种运维人员打交道了五年;在实习过程中,喜欢上了分析实际的运维数据;真正在那边工作的时候,基本上就是一个第五级的运维,做的事情是基于大数据技术管理网络和应用的性能,各种网络协议、IPTV、Video等等。

      回到清华做科研的时候,开设的也是网络性能管理/应用性能管理相关的课程,所有的科研都是跟运维相关的,在国内有一些合作者,包括百度的运维部门、搜索部门以及中石油数据中心等等。我可以认为自己是一个运维人员,很高兴在这里跟大家分享我们之前的一些经验。

      为什么说运维是可以做得很高大上的事情?这是一个会议叫SIGCOMM,网络里面最顶级的会议,如果计算机网络的事情是像电影一样,这就是奥斯卡,每年大概录用三四十篇论文,录用一篇,就跟中彩票一样。我们看它的Submission,就是这么多,跟我们运维相关的占了40%。

      再看评委会,我只列出了AT&T研究院里面的前实习人员和前员工的一些同事们,基本上现在都到大学里当教授了。所以说运维苦不苦,是不是可以做得更高大上一些,取决于怎么做。

      数据分析机器学习,这是很好的路线。再看评委会,我只列出了AT&T研究院里面的前实习人员和前员工的一些同事们,基本上现在都到大学里当教授了。所以说运维苦不苦,是不是可以做得更高大上一些,取决于怎么做。数据分析、机器学习,这是很好的路线。

      不光是最顶级的会议,我们还有一个专门做运维相关的会议。这个会议,就是这拨人里面,觉得SIGCOMM这个会一年30多篇,实在是收得太少了,我们再开一个会议,全部都是运维相关的,这是一个顶级的会议,是我科研领域一个主要的战场之一。

      铺垫一下,就是说运维是有很多可以钻研的地方,有很多科研问题。

      简单介绍一下我在清华大学的实验室,叫NetMan。我的网络管理实验室做的科研,基本上都是跟NPMAPM运维相关的。我们跟互联网公司做一些合作,主要做运维相关的自动化工作,跟SmoothAPP相关的运维工作,跟清华校园网WiFi做一些网络性能优化的工作。我们做了一个核心的基于云的运维算法平台,具体这些运维的应用,下面都有一个核心的算法,再下面还有一个大数据分析的平台,就是常用的各种开源工具。

      前面所讲的是背景部分。我想要表达的一点,工业界、学术界应该在运维领域里面能够密切合作,各取所需。工业界有很多实际问题,有很多的经验,也有实际的数据,学术界老师们有时间有算法有学生,大家一起结合,这样就会产生很好的效果。

      值得各位运维界同仁们关注的就是学术界的顶级会议,我比较推荐的是上面图中的这些会议,这些会基本上一年三五十篇论文的样子,简单浏览一下,跟大家做得工作是不是相关,浏览一下最新的会议论文集,看看有没有相关的,还是很有帮助的。美国的工业界,像谷歌Facebook都已经在这些会议上发表过一些论文,包括他们在工程上的一些实践。

二、从基于规则到基于学习

      简单介绍一下智能运维大概的历程,基于规则到基于机器学习

      我简单回顾一下,我们这个趋势,不光是说我们这个领域的趋势,整个人工智能领域发展的趋势。人工智能也是经历了起起伏伏,最近又非常火。基本历程,就是从基于专家库规则到逐渐变成机器学习,再到深度学习。

      我讲一下几年前基于专家库规则到机器学习的经历。

      我们在做降维分析的时候,需要一个规则集,什么事件导致另外一个事件,再导致额外顶级的事件,最后倒推回来,什么导致了这个事情。我们当时针对骨干网做的各种事件的关联分析,基本上是基于规则的。当时CDN的性能事件,这个事件导致这个事件,单独对它进行分析,如果这个事件发生,可以通过监测到的各种事件一直推到这儿。当时做出来的时候,起到了很好的效果,发表了论文,审稿评价也很高,也有专利,现在还在非常常规地使用,并且用得很好,效果很好。

      但是这里面有个问题,规则是由运维人员给出来的,为什么能够运行的很好?因为在网络骨干网上面情况不是那么复杂,网络协议一层接一层,事件比较少,所以比较容易把规则弄出来。

      我们跟百度进行合作的时候,发现不是那么好做。因为在互联网公司里面,大家都在讲微服务,模块特别多,规模很大,百度这边一百多个产品线,上万个微服务模块,上万台机器,每天上万个软件更新,想通过人把这些规则表达出来,运行到你的系统里,根本就不行,我们试了一下,很快就碰壁了。

      最后怎么办?我们采用了基于机器学习,把这些规则挖出来。我们在做的过程中不断总结,不断遇到新的问题,实现了基于规则的智能运维过渡到基于机器学习。

      机器学习本身已经有很多年了,有很多成熟的算法。要想把机器学习的应用做成功,要有数据,有标注数据,还要有工具(算法和系统),还要有应用。对于我们运维领域来说,这几点到底是怎么做的?

      第一点,是数据。互联网的应用天然就有海量日志作为特征数据,想各种办法做优化存储。在运行过程中遇到数据不够用还能按需自主生成,这是很好的。

      第二点,是过程反馈。在运维日常工作中还会产生各种标注数据,比如说工单系统,发生一次运维事件之后,具体负责诊断的人员会记录下过程,这个过程会被反馈到系统里面,我们可以从里面学到东西,反过来提升运维水平。

      第三点,就是应用。做出来的系统,我们运维人员就是用户,我们可以设计、部署、使用、并受益于智能运维系统,形成有效闭环。建模、测量、分析、决策、控制,很容易形成一个闭环。我们能够形成闭环,因为我们有这样的优势。

      总结一下,基于机器学习的智能运维具有得天独厚的基础,互联网应用天然有海量日志作为特征数据,运维日常工作本身就是产生标注数据的来源,拥有大量成熟的机器学习算法和开源系统,可以直接用于改善我们的应用,所以我个人有一个预测,智能运维在今后若干年会有飞速的发展(待续)。

      蓦然回首,自开号以来,本号已经创作430+篇文章,自媒体的红海时代已经全然来临(死伤无数),随着百家号、今日头条等知名媒体把推广重点放在娱乐八卦、人体艺术和小视频上之后,技术号生存空间变得更小。本号之所以一直坚持创作,其源动力基本来自几万粉丝精神的支持,如果觉得文章对大家有用,请大家不吝动动手指分享给更多读者(源动力)。也不知道什么时候会停笔,但不到万不得已相信会坚持写下去。

      利用周末时间(一般都是周末),对“Ceph技术架构、生态和特性详细对比分析”进行了第二版刷新,刷新内容包含Ceph架构,故障机制、后端对象存储演进、Ceph跟Glustre FS和华为分布式OceanStor 9000产品对比分析。感兴趣的读者可通过原文链接查看详情。

>>>推荐阅读

  • 从高性能计算(HPC)技术演变解析方案、生态和行业发展趋势

  • 存储性能瓶颈的背后,这篇文章带来的参考价值

  • 分布式、多活数据中心如何实现DNS域名解析和负载均衡

  • 传统企业存储厮杀过后,昨天的战场留下什么值得回忆

温馨提示:
请搜索“ICT_Architect”或“扫一扫”下面二维码关注公众号,获取更多精彩内容。

听说点赞和分享的朋友都已走上人生巅峰了

如何用 Vue 实现前端权限控制,vue权限控制

本文来自作者 雅X共赏 在 GitChat 上分享 「如何用 Vue 实现前端权限控制(路由权限 + 视图权限 + 请求权限)」,「阅读原文」查看交流实录。

「文末高能」

编辑 | 哈比

Linux DNS 服务器安装、配置和维护,linuxdns

每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了。这就是 DNS 协议所要完成的功能。

今天我们将讨论DNS服务器,特别是Linux DNS服务器,及其如何安装、配置和维护它。

为什么做前端权限控制

前端权限控制并不是新生事物,早在后端 MVC 时代,web 系统中就已经普遍存在对按钮和菜单的显示 / 隐藏控制,只不过当时它们是由后端程序员在 jsp 或者 php 模板中实现的。

随着前后端分离架构的流行,前后端以接口为界实现开发解耦,权限控制也一分为二,前端权限控制的所有权才真正回到了前端。

可能有的同学会想,前后端分别做一套控制,是不是将事情复杂化了,而且从根本上讲前端没有秘密,后端才是权限的关键,那是不是只在后端做控制就可以了。

对于这个问题我们首先应该明确,前后端权限控制他们的控制对象、控制目的和控制手段都不一样,如果仅从技术实现的角度讲,确实只在后端做控制就足够了,但在实际项目中,前端权限控制也有其不可或缺的作用,主要体现为三点:

  1. 提升突破权限的门槛;

  2. 过滤越权请求,减轻服务端压力;

  3. 提升用户体验。

第一点可以理解为前端权限控制是系统安全的排头兵,虽然不是主力,但起码手动输 url、控制台发请求、开发者工具改数据这种级别的入侵可以防范掉;

第二点是为了省钱,不该发的请求干脆就让他发不出去,带宽都是钱买的;

第三点是从用户体验角度出发,一个设计优良的系统理应根据权限为每个用户展现特定的内容,避免在界面上给用户带来困扰,这是前端的本职工作,也是我个人做前端权限最大的动力之一。

/etc/hosts文件

在没有DNS服务器的情况下,每个系统在本地网络上保留其主机名和相应IP地址列表的副本是合理的——特别是在没有互联网连接的小型站点上。

在Linux系统中,这个列表就是/etc/hosts文件。 即使你没有DNS服务器或DNS服务器不可用,该文件也可以使用/etc/hosts文件将IP地址转换为名称。

也许你已经有DNS服务器了,但你也会因为其它原因而想保留这个文件。例如,系统可能需要在向外部查询之前在本地查找DNS服务器的IP地址;这意味着系统在查询DNS服务器之前先检索该文件,如果查找到对应的域则无须查询任何DNS服务器直接将其转换为IP地址。

试试编辑下/etc/hosts文件,并添加以下信息:127.0.0.1 google.com.

然后,返回你的浏览器,输入google.com,看看结果如何。如果你的系统上安装了Apache并且本地主机正在运行,浏览器会显示localhost的索引页,而不是Google页面。

作为确认,你可以将google.com映射到任何网站的任何其他IP地址并查看结果。

因此这个文件所做的是将IP地址转换成名字,但这仅仅是在同一互相连接的网络下。 那么外部网络和众多系统的所有记录是如何维护的呢?

每个人都需要维护自己的/etc/hosts文件并自己更新吗?

更为稳健的域名服务是DNS服务器。

前端权限控制具体指什么

前端权限归根结底是请求的发起权,请求的发起可能由页面加载触发,也可能由页面上的按钮点击触发。

总的来说,所有的请求发起都触发自前端路由或视图,所以我们可以从这两方面入手,对触发权限的源头进行控制,最终要实现的目标是:

  1. 路由方面,用户登录后只能看到自己有权访问的导航菜单,也只能访问自己有权访问的路由地址,否则将跳转 4xx 提示页;

  2. 视图方面,用户只能看到自己有权浏览的内容和有权操作的控件;

  3. 最后再加上请求控制作为最后一道防线,路由可能配置失误,按钮可能忘了加权限,这种时候请求控制可以用来兜底,越权请求将在前端被拦截。

域名

当你访问网站时,你可以输入FQDN(Fully Qualified Domain Name,完全限定域名)或类似likegeeks.com或www.google.com的域名。在域名中从右到左的两个点之间的每个文本依次是顶级域组件、二级域组件和三级域组件。

所以,com是顶级域名组件; google是二级域组件; 而www是三级域名组件。

实际上,当你访问任何网站时,浏览器会默认在域的末尾添加一个不可见的点,因此该域将像www.google.com.一样。 该点被称为根域。

该点是由一大堆称为根域名服务器的特殊服务器管理的。截止这篇文章发表前,世界上有13个根域名服务器。 你可以把他们当成互联网的大脑 – 如果他们失效了,世界上就没有互联网了。

为什么是13呢? 因为如果世界的某处地震可能会破坏一个根服务器,所以其他的服务器可以继续提供服务直到受影响的服务器重新上线。

这些根名称服务器按字母顺序命名,名称如a.root-server.net、b.root-server.net等。

怎么做前端权限控制

控制的第一步是知道用户拥有哪些权限,所以用户登录后第一件事是获取权限数据。

权限数据至少应该包括路由权限和资源权限。

路由权限顾名思义,就是用户可访问的路由集合,以此作为设置前端路由和生成导航菜单的依据;资源权限是用户可访问的资源集合,“资源” 概念来自 RESTful 架构,如果对 “资源” 感到陌生也可以简单理解成用户能够发起的所有请求集合,以此作为视图控制和请求拦截的依据。

这里插入讲一下 “角色” 这个概念,可能有的系统会通过角色来做权限控制,我理解的角色就是特定几个资源打包后的快捷方式。

比如拥有总经理这个角色意味着拥有 a,b,c 这三个资源,副总经理就只有 b,c 两个资源,为用户赋予角色的本质是为用户赋予角色背后的资源。

引入角色这个概念的好处是,后台可以通过赋角色的方式,很方便的为某一类用户赋予特定的资源集合,而角色的作用应该仅限于此,尤其不应该将角色用做前端权限控制的依据,因为角色背后的资源权限是后端动态可配的。

我们也可以创建一个名字叫做 “总经理” 的角色,但其实一个资源都没有,所以前端应该始终关注资源权限本身,而只将角色视为用户的一个普通属性就好了。

有了权限数据下一步就是分别-实现对路由、视图、请求的控制。

路由控制首先要实现动态菜单,这样就可以对常规访问方式进行限制;对于非常规访问方式比如手动修改 url,可以从前端路由处着手做控制。

路由控制的思路有两种,一种是初始化即挂载全部路由,每次路由跳转前做校验;另一种是只挂载用户拥有的路由,相当于从源头上做了控制。

前者的缺点很明显,每次路由跳转都要做一遍校验是对计算资源的浪费,另外对于用户无权访问的路由,理论上就不应该挂载。

后者解决了上述问题,但仔细想这里存在一个悖论,要按需挂载路由就需要知道用户的路由权限,要知道用户的路由权限就需要用户先登录进来,但路由没有加载应用也没有初始化,用户从哪儿登录?

这里又可以有两种解决思路,一种是单独做一个登录页,登录后带着用户凭据跳转到前端应用;另一种是先初始化一个只有登录路由的应用,用户登录后动态添加路由,当然这需要框架提供支持。

视图控制需要实现一个可以在视图层调用的权限验证方法,输入用户期望的权限,输出是否拥有该权限,将调用这个方法的结果,作为界面上需要验证权限的控件或元素显示与否的依据。

请求控制实际上就是为你使用的 HTTP 库实现一个请求拦截器,对将要发起的请求与用户资源权限进行匹配,拦截越权请求。

这里值得一提的是对于携带参数的 url,需要先进行模式约定,比如/people/1这个 url 可以在权限中描述为/people/**,那么拦截器中就要先将这种 url 处理成约定后的格式,然后再进行权限验证。

顶级域名 (或称作一级域名 TLDs)

我们已经见过顶级域名的组成部分,如 com。可以认为,顶级域名为 DNS 命名空间提供分类组织。

顶级域名(TLD)根据地理或功能方面分为几类。

截止本文撰写时,网上有 800 多个顶级域名。

顶级域名类别有:

  • 通用的顶级域名如:org, .com, .net, .gov, .edu 等等

  • 国家代码顶级域名如:.us, .ca 等,分别对应美国和加拿大的国家代码

  • 新的品牌顶级域名,允许组织创建最多 64 个字符的TLD,如:.linux, .microsoft, .companyname 等

  • 基础架构顶级域名如: .arpa

基于 Vue 的实现方案

子域名

当你访问一个类似 mail.google.com 这样的网站, 这里的mail 就是 google.com的子域名.

只有mail.google.com 的名称服务器知道他下面存在的所有主机,所以Google会回复是否有一个叫mail 的子域名。根名称服务器对此并不知情。

-

概述

到目前为止我们谈的都是脱离具体技术栈的实现思路,理论上可以用任何技术栈实现这个思路,但我在项目中用的是 Vue,所以下面介绍的实现细节全部基于 Vue。

先来看整个流程:

从第一步 “初始化 Vue 实例” 到 “获取权限数据” 之间做的其实是用户鉴权,这一步跟权限控制关系不大,怎么做都可以。

这里的做法是用户登录后获得一个 token,然后在请求 Headers 中设置 “Authorization”。token 会存进 sessionStorage 里,用户刷新将直接使用本地 token 授权,并重新获取权限数据,如果本地 token 失效,那么后端应该返回 401 状态码,前端跳回登陆界面。

从 “获取权限数据” 到 “异步加载路由组件” 之间做的是用户权限初始化,分别用addRoutes()方法实现动态路由及菜单,实现全局权限验证方法及指令,以及实现 axios 请求拦截。

因为用的是动态路由方案,当动态路由注入时异步路由组件会开始加载,首次访问通常是加载首页组件,如果是用户刷新,地址栏还保留着之前浏览的的 url,那么动态路由注入后也会正确的加载对应的路由组件,显示对应的界面。

下面我们着重来看权限初始化部分的实现细节,因为所有的初始化操作都基于后端给的权限数据,所以我们先来约定权限数据的数据格式:

路由权限数据是如下格式的对象数组

资源权限数据是如下格式的对象数组

路由控制

动态路由

最初实例化的路由里仅包含登录和 404 之类的基本路径,而我们期待完整的路由是这样的:

一级路由只增加了一个首页,以及最后兜底的 404,其他功能模块都作为首页的子路由,这么做主要是为了可以在首页实现全局导航菜单,实际项目中也可以调整这个路由结构。

下一步我们关注的重点应该是获取首页的子路由们,思路是事先在本地存一份整个项目的完整路由数据,根据用户的路由权限对完整路由进行筛选。

具体说一下筛选的实现,先将路由权限数据处理成如下结构:

然后遍历本地完整路由,在循环中将路径拼接成上述结构中的 key 格式,通过hashMenus[route]判断路由是否匹配。

如果你有更好的筛选方法,或者后端返回的路由权限数据与约定不同,也可以酌情修改这部分的逻辑,只要最终能得到可用的路由数据就可以。

注意在调用addRoutes()方法时,404 页面的模糊匹配一定要放在数组的最后,否则其后的路由都不会生效。

动态菜单

用户的实际路由数据可以直接用来生成导航菜单,但首先有一个小问题,路由数据是在根组件中得到的,而导航菜单存在于首页组件中,我们需要用某种方式将菜单数据传递到首页。

方法有很多,考虑到菜单数据在整个用户会话过程中不会发生改变,而且除了生成菜单之外就没有其他共享价值了,所以这里就用了最简单直接的办法,把菜单数据挂在根组件上,在首页里用this.$parent.menuData获取。

另外,导航菜单很可能会有一些个性化需求,比如添加栏目图标,这可以通过在路由中添加meta数据实现,例如将图标 class 或 unicode 存到路由 meta 里,模板中就可以访问到 meta 数据,用来生成图标标签,类似的需求也都可以这样来做。

另一个问题可能在多角色系统中比较常遇到,就是当不同角色都有一个名字相同但功能不同的路由,会发生路由名称冲突。

举例来说, 系统管理员和企业管理员都有一个叫做 “ 账号管理 “ 的路由,但他们的操作对象不同,实际上这就是两个完全不同的路由,所以路由的 name 肯定要有所区分。

为了能在前端导航菜单上都能显示 “ 账号管理 “ 这个名字,我们可以为路由再起一个别名,放进meta.name,生成导航菜单时优先展示别名就可以了。

DNS服务器的类型

一共有三种DNS服务器。

视图控制

全局验证方法

验证方法的的实现本身很简单,全局混入一个$_has()方法,内部实现无非是将所需权限与拥有权限做比对,返回一个布尔值。重点在于工程实践上的优化,怎么能让这件事做起来更方便,通常的做法可能是下面这样的:

像这样的按钮一个页面上可能有多个,每个页面都需要手动的去维护权限信息,而且过程中还要频繁的在模板和脚本之间、当前组件文件和 api 文件之间来回切换,去查阅每一个权限对应资源的 url 和方法具体是什么。

这样的流程显然非常容易出错,开发体验也很不好。

经过摸索和总结,最终使用的方案是将权限信息和请求 api 维护在一起,组成一个资源对象,验证方法接收资源对象为参数,方法内部自动获取对象中的权限信息用做验证。

这样做的好处是在写资源的请求方法时可以顺手维护上资源的权限信息,这样一来在前端模板中就不需要出现具体的权限信息,只要给到这个资源对象的名称就行了,另外权限验证方法应该允许多个权限联合验证,所以将参数格式改成数组。

最终用法是这样的:

资源对象示例:

验证方法的实现比较简单就不展开了,将权限验证方法全局混入就可以在项目中很容易的配合v-if实现元素显示控制,v-if这种方式的优点在于除了可以校验权限外,还可以在表达式中结合业务数据做更多样性的判断,从而实现随业务变化的动态视图控制。

自定义指令

v-if的响应特性是把双刃剑,因为表达式在应用运行过程中会频繁触发,但实际上在一个用户的会话周期内其权限极少会发生变化,v-if产生的大量运算都是不必要的,多数时候我们希望只在视图载入时做一次校验决定元素的去留,这个需求可以通过自定义指令实现:

自定义指令内部仍然是调用全局验证方法,但优点在于只会在元素初始化时执行一次,多数情况都应该使用自定义指令实现界面元素的权限控制。

主DNS服务器

这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定域名的地址。主DNS服务器知道全部在它管辖范围的主机和子域名的地址。

请求控制

请求控制是利用 axios 拦截器实现的,原理是在请求拦截器中获取本次请求的 url 和 method 信息,再与资源权限数据做比对,判断请求是否合法从而决定是否拦截。

普通请求很容易处理,遍历资源权限数据,直接判断request.methodrequest.url是否吻合就可以了。对于带参数的 url 就不能用全文匹配了,而应该用模式匹配,这里需要前后端先协商一致。

后端返回的资源权限数据中,需要将 url 的参数用通配符代替,前端的请求拦截器中也要将带参数 url 处理成跟后端一致的格式,这样才能正确校验这类 url,例如以下这两种常见的参数格式及其代替写法:

格式的匹配和参数替换可以用正则表达式实现,可能遇到的一个问题是,如果你要发起一个 url 为 “/aaa/bbb” 的请求,默认会匹配为上述第一种格式,然后被处理成 “/aaa/**” 进行权限校验。

如果这里的 “bbb” 并不是参数而是 url 的一部分,那么你可以将 url 改成 “/aaa/bbb/“,在最后加一个 “/“ 以绕过格式匹配。

如果你的项目还需要其他的通配符格式,只需要在拦截器中实现对应的匹配和转化方法就可以了。

Vue-Access-Control

上述就是我对前端权限管理的一点经验,完整方案已经整理成开源项目 Vue-Access-Control,若对实现细节有疑问可以参考对应部分的代码,如果这个项目对你有帮助,也请多多 star,不要客气,项目地址见下方。

项目本身也是一个可运行的 DEMO,演示地址和测试账号同样见下方。

仓库地址:

项目主页:

演示地址:vue-access-control.refined-x.com

测试账号:

近期热文

**《让你一场 Chat 学会 Git》**

**《接口测试工具 Postman 使用实践》**

**《如何基于 Redis 构建应用程序组件》**

**《深度学习在摄影技术中的应用与发展》**

**《这样做,你的面试成功率将达到 90%》**

**《如何用 TensorFlow 让一切看起来更美?》**

**《Web 安全:前端攻击 XSS 深入解析》**



「阅读原文」看交流实录,你想知道的都在这里

辅助DNS服务器

这些服务器作为主DNS服务器的备份,也承担一定负载。主服务器知道辅助DNS服务器的存在,并且会向他们推送更新。

版权声明:本文由ag真人发布于公司领导,转载请注明出处:vue权限控制,服务器安装