vue权限控制,语音服务

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

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

「文末高能」

编辑 | 哈比

Linux ls 命令的 20 个实用范例,linuxls

来自:Linux中国,译者:geekpi 校对:wxy

链接:

原文:

Linux中一个基本命令是ls。没有这个命令,我们会在浏览目录条目时会遇到困难。这个命令必须被每个学习Linux的人知道。

ls是什么

ls命令用于列出文件和目录。默认上,他会列出当前目录的内容。带上参数后,我们可以用ls做更多的事情。这里是一些在日常操作中使用到的ls用法的示例。

1、不带参数运行ls

不带参数运行ls会只列出文件或者目录。看不到其他信息输出(译注:有时候你发现无参数的ls命令和这里描述的不同,那有可能是你的ls命令实际上带参数的ls别名)。

$ ls

2、使用长清单模式

使用-l字符(小写L字符),会显示当前目录内容的长列表。在接下来的例子中,我们会结合-l参数(这个参数经常使用)来得到更好的结果。

$ ls -l

这里是如何读取输出 :

第1列

  • 第一个字母d意味着内容是目录或者文件。在上面的截图中,Desktop、 Documents、 Downloads 和 lynis-1.3.8是目录。如果是’-‘(减号),这意味着它的内容是文件。当它是l(小写l字符),意味这内容是链接文件。

  • 下面的9个字符是关于文件权限。前3个rwx字符是文件的拥有者的权限,第二组3rwx是文件的所有组的权限,最后的rwx是对其他人访问文件的权限。

第2列 这行告诉我们有多少链接指向这个文件。

第3列 这行告诉我们谁是这个文件/文件夹的所有者。

第4列 这行告诉我们谁是这个文件/文件夹的所有组。

第5列 这行告诉我们这个文件/文件夹的以字节为单位的大小。 目录的大小总是4096字节。

第6列 这告诉我们文件最后的修改时间。

第7列 这告诉我们文件名或者目录名。

3、显示文件大小

以字节为单位看大小可能会不方便。6.5M读起来比6727680字节更简单。要这么做,我们可以使用-h与-l结合的参数。-h参数意味着便于人识别。

$ ls -lh

另外一个可以这么做的参数是–si。这个参数和-h参数类似,但是-si以1000为单位,而-h以1024为单位。

$ ls -si

4、排序文件大小

在我们可以显示文件大小之后,我们希望以文件大小排序。我们可以使用-S参数来这么做。这列表会从大到校排序。

$ ls -lhS

5、测量大小

ls可以通过使用-block-size=SIZE改单位大小。这里的SIZE是:

K = Kilobyte   M = Megabyte   G = Gigabyte   T = Terabyte   P = Petabyte   E = Exabyte   Z = Zettabyte   Y = Yottabyte

比如,我们希望使用MB作为单位大小。所以语法就会像这样:

$ ls -l –block-size=M

6、显示隐藏文件

在Linux中,以”.”(点号)开头的文件是隐藏文件。为了在ls命令中显示它,我们可以使用-a选项。

$ ls -a

7、只列出目录条目

如果我们希望只列出目录,我们可以使用-d选项。

$ ls -d */

从零开始,搭建 AI 音箱 Alexa 语音服务,aialexa

本文来自作者 Mike 在 GitChat 上分享 「从零开始,搭建 AI 音箱 Alexa 语音服务」,「阅读原文」查看交流实录。

「文末高能」

编辑 | 哈比

为什么做前端权限控制

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

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

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

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

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

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

  3. 提升用户体验。

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

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

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

一、概述

生活场景的引入: 物联网的快速发展,各种智能设备层出不穷,作为极客,家里早已安上了用 APP 控制的智能灯、智能插座,刚刚安装上的时候,还有新鲜感,久了之后,是不是会有这样的现象:

早上醒来要开灯,需要经过:

  1. 迷迷糊糊从床头柜上摸到手机

  2. 手机用指纹解锁

  3. 连接无线网络

  4. 找到对应设备的 APP

  5. 点击开灯按钮

这样的场景真的为生活带来了便利吗 ? 糟糕的体验,繁琐的过程,从而使这个产品慢慢淡出我们的生活场景 . 于是,那个物理开关的使用频次又恢复了,这或许也是智能设备不能普及的根本原因之一。

以上生活的场景有很多,根本原因是缺少了和产品对话的功能,即语音交互,所以显得不那么智能。

理想的情景:

早晨醒来时,只需要说一声: 睡醒了,然后灯自动亮起,窗帘自动打开,音乐自动响起 ….,这样的场景你还满意吗 ?

一个便利的生活场景描述正式带你进入本文的环节: 语音交互

根据人机交互这个维度,主要划分了三个时代:

第一个时代:PC 时代。让电脑明白人类的意图,通过鼠标、键盘的方式输入让浏览器搜索获取想要的知识。

第二个时代:移动时代。Touch 称为该时代交互方式,就是 2007 年乔布斯发布的 iPhone。触摸屏的出现极大的提高了用户交互的体验,容易上手。

键盘和触摸同共构成了互联网交互方式的过去和现在。从另外一个角度说,也可以把键盘对应于 PC 时代交互方式,把触摸对应于移动时代交互方式。

正是因为用户从 PC 转移到了移动端,互联网行业才发生了那么多的变化。

第三个时代:AI 时代。语音称为该时代的交互方式,每一部手机都将能听会说,每一台家电都将能听会说,每一辆汽车都将能听会说,无人驾驶,每一个玩具都将能听会说。

语音时代,用户只需要用说话的方式给服务终端发布命令,就能得到相应的服务 . 这一产业从上世纪六十年代就已出现,但并不为普通消费者所熟知,消费者对其认知度也比较低。

近年来,随着苹果、亚马逊、谷歌、微软等公司先后推出 Siri、Echo 等智能语音服务,这一服务以及相关产业也开始被普通消费者和投资界所关注。

这里必须要提到亚马逊的 Echo 智能音箱。Echo 已经成为语音时代的一个重大创新,成为智能家庭的一个现象级应用。

由于 Echo 尚没有中文版,所以大家没有体会到它的热度,然而在美国,已经成为 “ 一款现象级的革命性产品 “。

从 2014 年 11 月正式发布到现在,亚马逊的 Echo 智能音箱超过两岁了。在这两年时间里,它从一开始随时可能夭折的 “ 新生儿 “,发展成如今市场上最为火热的智能家居产品之一。

前端权限控制具体指什么

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

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

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

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

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

8、不打印所有者信息

要这么做,我们使用-g选项。

$ ls -g

9、不打印组信息

-g隐藏了拥有者信息,—G会隐藏组信息。

$ ls -lG

10、打印UID和GID

如果你想以数字方式列出项的所有者和所有组(即UID和GID),我们可以带-n选项使用ls命令。这里是个例子。

$ ls -n

从上面的例子中,我们知道用户pungki的UID是100,GID是1000,而root组的GID是0。

11、不带颜色打印

一些Linux发行版已经对ls命令启用彩色。这会使ls以各种颜色打印列表。如果你不想要这样,你可以使用 –color=never 参数。

$ ls –color=never

12、打印每个文件的索引号

为了打印索引或者大家俗称的inode号,我们可以使用-i选项。索引号会显示在第一列。

$ ls -li

13、增加 / (斜线) 标记目录

要这么做,使用-p选项。

$ ls -p

14、排序时反转顺序

你或许需要在列出条目时反转顺序。要这么做,你可以使用-r选项。

$ ls -r

15、递归列出子目录

带-R参数后,你可以列出包含它子目录的目录。

$ ls -R

16、扩展名排序

你可以使用-X参数或者–sort=extension来通过扩展名来排序(译注:这样对于筛选不同类型的文件很有用)。

$ ls -lX

$ ls –sort=extension

17、通过修改时间列出

使用-t选项会按修改时间排序,新的文件在前。

$ ls -lt

18、列出你的主目录

要列出你的主目录,你可以用”~”(波浪号)来代表它。这样你就不必输入完整的目录名。让我们假设家文件名为/home/pungki,那么波浪号就对/home/pungki有意义了。

$ ls ~

19、列出父目录

无论你在那个目录,你可以列出父目录而不必输入完整路径。这是个例子。

$ ls ../

这回列出1层之上的目录内容。

$ ls ../../

这回列出2层之上的目录内容(译注:可不支持“…”来代表2层之上)。

20、打印ls命令版本

使用–version参数打印它。

$ ls –version

总结

这些是在日常操作中会使用到的参数。当然你总可以输入man ls 或者 ls –help 来查询ls的手册页

 


●本文编号2839,以后想阅读这篇文章直接输入2839即可

●输入m获取到文章目录

推荐↓↓↓

Linux学习

更多推荐《18个技术类公众微信**》**

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C 、.NET、Linux、数据库、运维等。

二、国内外智能音响

随着着亚马逊 Echo 的火爆引发一连串的效应,这也是智能音箱行业的一个重要转折点。各大巨头纷纷入局,如亚马逊 Alexa、微软 Cortana、Google Assistant、苹果 Siri、三星 Bixby、等智能语音助手。

如今,这场战火也点燃了中国市场。井喷式发展的中国智音箱市场已经成为了科技巨头、传统行业厂商、创业公司博弈的竞技场,玲琅满目的智能音箱产品都奔赴在路上 !

各大厂商的音响盘点,单品测评,性价比优势,各种平台已报道出很多,这里以音响的软硬件配置作为切入点,分析各大厂商的方案选型,性价比优劣势:

怎么做前端权限控制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. 麦克风

麦克风是智能音响很重要的环节,包括远场拾音、噪声抑制、混响去除、人声干扰抑制、声源测向、声源跟踪、阵列增益等功能,进而提高语音信号处理质量,以提高真实环境下的语音识别率。

通过对比图可以看出亚马逊 Echo、天猫精灵、小米 AI 音响、叮咚 2 代技术路线类似,使用了 6、7、8 个麦克风环形阵列,使得波束的空间区分性更强,保证声源定位和拾音效果。

谷歌 Home 和问问音响则不同,采用双麦克风方案,对麦克风的数量和阵列排列结构依赖较少,更加依赖语音增强算法,从而获得良好的拾音效果。

根据第三方测评机构,和 Echo 对比,谷歌 Home 在 3 米内的综合能力(拾音、信噪比、抗噪、抗回声)要更好。

谷歌的麦克风阵列采用的算法很有特点,他们对深度学习的应用较深,算是一种波束成型和深度学习相结合的一种形式 。

基于 Vue 的实现方案

2. 处理器

亚马逊 Echo 采用 TI(德州仪器)DM3725CUS100 的芯片,主要为工业级应用,主频不高,但处理能力很强 . 功耗、性能控制的很好。

谷歌 Home 采用的是 Marvell(美满) 88DE3006 的芯片,该芯片也为工业级芯片,在通讯中应用比较多。

该芯片为 2 核,也显示了谷歌 Home 在硬件端没有太多计算能力,更多计算在云端,这样就简化了很多东西,也不需要 Codec,麦克风阵列可与主控直接相连。

天猫精灵采用的是 MTK MT8516 的语音专用芯片,这款芯片是 MTK 为智能助手打造的,主频达 1.3GHz,芯片内建 WiFi 802.11 b/g/n 和支持蓝牙 4.0,支持高达 8 通道的 TDM 麦克风阵列接口和 2 通道的 PDM 数字麦克风接口,非常适用于远场 (Far-field) 麦克风语音控制和智能音响设备,在同代中稳定性、性价比很高。

问问音响则采用的是 MTK MTK2601 芯片,面向于智能穿戴方面,1.2GHz 双核心 ARM Cortex-A7 处理器,MT2601 需要结合 MT6630 无线射频芯片,实现双频 WIFI、蓝牙 4.1 以及 ANT 和 FM 等功能。

叮咚 2 代采用的全志科技 R16 芯片,主要面向于智能家居方面,采用极具性价比的四核 ARM Cortex-A7 架构处理器,支持基于 Linux 的开源系统 Tina,(Tina 是全志科技全力打造的专门用于全志智能硬件平台的系统软件品牌);

支持 AirPlay、DLNA、Qplay、Airkiss、Smart Link 等多种网络应用协议;提供独特的算法、IP 包,使开发者可以专注于其自有应用和产品市场运营,降低产品开发成本,并缩短开发周期。

小米 AI 音响采用的是 Amlogic 的 A112 芯片,主要面向于智能家居方面,四核 ARM Cortex-A53 架构,8 通道 I2S 和 S /PDIF 输入和输出,具有强大的运算性能和丰富的接口,凭借四核 64 位 CPU 架构强大的计算能力,可以支持无需外部 DSP 芯片的主流远场语音识别解决方案。 

卓越的音频处理能力可支持多种本地或在线高保真音乐,因此用户可随时随地欣赏音乐。

概述

到目前为止我们谈的都是脱离具体技术栈的实现思路,理论上可以用任何技术栈实现这个思路,但我在项目中用的是 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,生成导航菜单时优先展示别名就可以了。

3. 扬声器发声单元

智能音响以 “智能” 出名,当下的智能音响更多的考虑是音质的选择,音质一方面受 Codec 芯片影响,另一方面也受到发音单元的影响。

亚马逊 Echo 采用的是一个高音单元、一个低音单元和一个倒相管的设计结构,保证高音的同时,也增强了低音的效果。之所以说 Echo 是智能音箱产品的典型代表,不仅仅是因为它是第一款智能音箱,更因为它在智能、音质、体积、体验上都做到了平衡。

谷歌 Home 和天猫精灵和小米 AI 和叮咚二代,在音质上稍微弱一些,仅采用了一个全频带的发音单元,通过共振鼓膜来增强一部分低音效果。

从设计结构上来看,谷歌 Home 的两片共振鼓膜也形成一种立体声效果,比其它又相对好一些。

问问音箱差异化的点在于大功率发音单元的配置,采用了 1 寸高音单元和 3 寸低音单元以及更大音腔的设计方式,功率高达 50W,从而在硬件方面提供更好的音质,这也大大提升了物料成本。

对比硬件,各家平台各有优劣势,面对不同的用户需求,需要结合软件的优化才能达到良好的体验和语音交互。

本文由ca88手机版登录发布于亚洲城官网,转载请注明出处:vue权限控制,语音服务

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。