菜单

认证与授权

相关源文件

本文档详细介绍了 vue-element-admin 中实现的身份验证和授权系统。它涵盖了登录流程、基于令牌的身份验证、基于角色的访问控制以及权限管理机制。有关权限之外的一般路由系统的更多信息,请参阅 路由系统

1. 身份验证系统概述

Vue Element Admin 实现了一个基于令牌的身份验证系统,该系统与基于角色的授权协同工作。该系统管理用户会话、限制对受保护路由的访问,并根据用户权限实现 UI 元素的条件渲染。

来源

2. 登录流程

身份验证过程从登录页面开始,用户在此处输入其凭据。提交后,凭据将被验证并获取令牌。

2.1 登录表单

登录表单实现在 Login 组件中,该组件收集用户名和密码输入,并将登录操作分派到 Vuex 存储。

用于测试的默认用户凭据包括

  • 管理员用户:用户名:admin,密码:任意
  • 编辑器用户:用户名:editor,密码:任意

来源

3. 令牌管理

身份验证令牌通过 js-cookie 库使用 Cookie 进行管理。该系统提供了用于设置、获取和删除令牌的实用程序。

3.1 令牌工具

令牌操作集中在 auth 工具模块中

功能目的实现
getToken()从 Cookie 中检索令牌返回“Admin-Token”的值
setToken(token)将令牌存储在 Cookie 中将“Admin-Token”设置为提供的值
removeToken()从 Cookie 中删除令牌删除“Admin-Token” Cookie

来源

4. 权限控制

Vue Element Admin 中的权限控制基于用户角色,这些角色决定了可以访问哪些路由和 UI 元素。

4.1 路由权限系统

系统使用全局路由守卫在导航到路由之前检查权限

路由访问由以下方式控制:

  1. 公共可访问路由的白名单(/login, /auth-redirect
  2. 令牌验证
  3. 基于角色的路由过滤

来源

4.2 路由类型

路由分为两类:

  1. 常量路由:始终对所有已登录用户开放
    • 示例:仪表板、个人资料、文档
  2. 异步路由:根据用户角色动态加载
    • 示例:权限管理页面、管理员设置

路由可以在其 meta 属性中指定所需的角色

meta: {
  roles: ['admin', 'editor']  // Required roles for route access
}

来源

5. 用户角色与信息

身份验证成功后,系统会获取用户信息,包括角色、姓名和头像。

5.1 用户存储状态

Vuex 用户模块维护以下状态:

状态属性描述
token用户身份验证令牌
名称用户的姓名
avatar用户的头像 URL
introduction用户的简介文本
roles用户角色数组

来源

5.2 获取用户信息

用户信息在身份验证成功后检索

来源

6. 动态路由生成

根据用户的角色,系统会动态生成可访问的路由。

6.1 路由过滤算法

路由生成过程涉及根据用户角色过滤异步路由

  1. 检查路由是否具有 meta.roles 属性
  2. 如果未指定角色,则路由对所有人开放
  3. 如果指定了角色,请检查用户是否至少拥有一个必需的角色
  4. 将相同的逻辑递归应用于子路由

来源

7. UI 权限指令

该系统提供了指令,用于根据用户权限有条件地显示或隐藏 UI 元素。

7.1 用法示例

可以根据用户角色有条件地渲染元素

权限检查也可以在组件内以编程方式执行

来源

8. 基于角色的页面

Vue Element Admin 通过不同的页面视图和组件展示了基于角色的授权,适用于不同的用户角色。

8.1 编辑器仪表板

编辑器仪表板显示特定于用户的信息,包括用户的角色

来源

8.2 权限示例

该系统包含几个权限控制示例

  1. 页面权限:根据角色限制整个页面
  2. 指令权限:使用指令有条件地渲染的元素
  3. 角色权限:动态角色分配和权限更改

来源

9. 更改用户角色

该系统支持动态更改用户角色,这会重新构建可访问的路由

来源

10. 登出流程

登出流程包括清除用户状态、移除令牌和重置路由器

来源

11. 错误处理

系统包含身份验证失败的错误处理

  1. 如果令牌验证失败,用户将被重定向到登录页面
  2. 如果角色获取失败,令牌将被重置,用户将被重定向到登录页面
  3. 提供 401 和 404 错误页面,用于未经授权的访问和找不到的资源

来源