前端_应用控制用户访问权限

访问权限控制,即不同角色的人员登录应用后,能够看到或操作的内容不同,主要涉及

  • 系统级权限:是否有权限访问本应用
  • 页面级权限:是否有权限访问某些页面
  • 功能级权限:是否有权限操作某些功能按钮
  • 接口级权限

本文针对以上几点进行展开

(一)系统级权限

对于自有登录页面的应用,非法账号登录提示“账号或密码不匹配”等提示语,合法账号登录提示“您暂无本应用的访问权限” 等,并停留在本页面不发生跳转

对于使用单点登录的应用,因自身没有登录页面,当合法账号登录应用后,需在页面发起的第一个接口校验该用户的权限范围,该接口通常用来单纯的获取用户身份信息及权限列表,响应速度快。

实现思路是:在系统任意一个路由登录时(用户可能从任意一个页面登录进来访问本系统,不能只把范围限制在首页上),检查当前状态管理机上是否拥有用户信息:

  • 有,直接取管理机上的权限判断
  • 没有,则发请求获取用户权限及身份信息,并进行权限判断

判断系统是否有有效的用户信息

如果系统还未获取过用户信息及权限信息,则发起请求:

系统级的权限控制往往通过一个简单的字段来标识即可


(二)页面级权限(异步动态路由)- 【重点】

控制页面访问分白名单页面和非白名单页面两种情形。

(1)是否为免权限页面,如首页等这些页面是无需任何权限即可浏览的公共页面,通常我们会维护一个为 whiteList 的数组,遍历查询前往页面是否在白名单内,- 有:放行;- 没有:执行以下(2)中逻辑

本文以首页为白名单页面为例


(2)对于非白名单有权限控制的页面,使用基于Vue-Router,Vuex 以及 AddRoutes 进行权限控制

(2.1)在Vue-Router的 index.js 中定义好基础路由模块,通常404等页面、白名单可以直接在这里定义,也可以定义一个白名单路由模块


(2.2)设置初始路由内容,并对外暴露


(2.3)前后端对每一个页面路由根据其特性约定一个“路由Key”用来识别该路由,通常建议遵循一定的规则如使用 “系统编码菜单页面”,举个栗子,AM_APPROVAL_APPLYBYUSER。

     - 设置“路由Key”的好处是:将路由信息映射成一个标准信息元,后端仅关注Key和权限对应关系,前端只关注Key和路由Path对应关系,做到前后端分离

(2.4)对功能型页面路由,以功能或菜单为组划分成不同的模块,且在模块中每个路由 meta
属性中定义约定好的路由Key

(2.5)做好以上准备后,我们开始实现异步动态路由

(2.6)定义 permission.js 文件用来专门管理页面级访问权限,并引入到 main.js中。

(2.7)和系统级权限控制类似,进入页面的时候,检查是否已获取用户权限信息,如未获取,需发起请求

(2.8)发起请求获取用户信息,并将结果 addRoutes到基础路由内容中

【注1】 permission/getAsyncRoutes 在Vuex的action中获取路由Key列表,以下代码中的asyncRoutes,是本地未过滤的全路由列表,在路由,accessRoutes是权限路由列表

【注2】 根据“路由Key”列表,构建用户权限页面 generateAnsycRoutes(),返回权限路由列表

总结一下:

  1. 定义基础路由,含白名单,404等页面,分模块定义好全路由
  2. 前后端对每个路由约定好响应的路由Key,并加入到每一个非白名单的页面路由meta属性上
  3. 在全局路由守卫上监听检查用户身份信息和权限信息,如未获取则前往获取,已获取则判断页面权限
  4. 异步获取用户权限路由Key,根据路由Key和本地全路由筛选出路由集
  5. 返回权限路由集并执行渲染

(三)功能级权限

控制用户是否能操作某些功能按钮,这部分涉及业务逻辑更强,通常ToB产品会由企业级权限体系一同控制,ToC产品会将用户分为不同类型,享有不同权限。权限划分有两种不同类型:

(1)纵向等级:该方式将用户类型划分为:“普通用户”,“会员”,“超级会员”, “应用管理员”等级别,越往后权限越高,所能操作的内容也越多。

  该类型的实现思路是在以上页面级权限进行的扩充,后端只要在每个路由Key上返回相应的按钮Key,前端根据按钮Key来控制按钮是否可视,或可操作。

(2)横向等级:该方式通常指不同类型的用户,需要操作不同的功能,如: “教师”,“学生”,“后台管理员”等

  该类型的实现思路是在获取用户身份信息的时候拿到用户类别,根据用户类型对页面进行展示


(四)接口级权限

接口权限目前一般采用 jwt的形式来验证,未验证通过通常返回 401 Authentication Required。跳转至登录页重新登录,拿到合法token后,存储在cookiessessionStorage中,

与以上不同的是,接口级权限一般和UI库关系不大,常用在管理后台等需要校验用户登录信息或有数据权限控制的页面中,也有可能是需要实时校验当前账户是否合法。例如,用户在页面上长时间停留未操作超过token有效时长,或在其他页签上登录了别的账号等情况

本文以使用 axios 的请求拦截器为例来实现,如下


以上针对Vue框架对前端如何控制应用的访问权限进行描述,主要讨论的是思路,如有描述不正确的地方欢迎大家讨论指出

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345