Vue实战之 6. 权限管理模块

news/2024/7/10 2:24:27 标签: 前端, vue

1. 权限管理业务分析

通过权限管理模块控制不同的用户可以进行哪些操作,具体可以通过角色的方式进行控制,即每个用户分配一个特定的角色,角色包括不同的功能权限。

在这里插入图片描述

2. 权限管理开发开始

在这里插入图片描述
码云中也出现了rights分支:
在这里插入图片描述

3.权限列表展示

 <!-- 卡片视图 -->
    <el-card>
      <el-table :data="rightsList" border stripe>
        <el-table-column type="index" label="#"></el-table-column>
        <el-table-column label="权限名称" prop="authName"></el-table-column>
        <el-table-column label="路径" prop="path"></el-table-column>
        <el-table-column label="权限等级" prop="level">
        <template v-slot="scope">
        <el-tag v-if="scope.row.level === '0'">一级</el-tag>
        <el-tag type="success" v-if="scope.row.level === '1'">二级</el-tag>
        <el-tag type="warning" v-else>三级</el-tag>
        </template>
        </el-table-column>
      </el-table>
    </el-card>
    // 获取所有的权限
    async getRightsList () {
      const { data: res } = await this.$http.get('rights/list')
      if (res.meta.status !== 200) {
        return this.$message.error('获取权限列表失败!')
      }
      this.rightsList = res.data
      console.log(this.rightsList)
    }

4. 角色列表展示

  • 调用后台接口获取角色列表数据
  • 角色列表展示
 // 获取所有角色的列表
    async getRolesList () {
      const { data: res } = await this.$http.get('roles')
      if (res.meta.status !== 200) {
        return this.$message.error('获取角色列表失败!')
      }
      this.roleList = res.data
      console.log(this.roleList)
    }

5. 角色权限分配

1. 表格行展开效果

在这里插入图片描述

  1. 通过el-table-column 组件的 type=“expand” 方式实现表格行展开效果。
  2. 在表格展开行渲染一级菜单
  3. 在表格展开行中渲染二级菜单
 <!-- 展开列 -->
        <el-table-column type="expand">
          <template v-slot="scope">
            <el-row v-for="(item1,i1) in scope.row.children" :key="item1.id"
            :class="['bdbottom',i1 === 0 ? 'bdtop':'','vcenter']">
              <!-- 渲染一级权限 -->
              <el-col :span="5">
                <el-tag closable @close="removeRightsById(scope.row,item1.id)">{{item1.authName}}</el-tag>
                <i class="el-icon-caret-right"></i>
              </el-col>
              <!-- 渲染二级和三级权限 -->
              <el-col :span="19">
                <!-- 通过for循环 嵌套渲染二级权限 -->
                <el-row v-for="(item2,i2) in item1.children" :key="item2.id"
                :class="[i2 === 0? '':'bdtop','vcenter']">
                  <el-col :span="6">
                    <el-tag type="success" closable @close="removeRightsById(scope.row,item2.id)">{{item2.authName}}</el-tag>
                    <i class="el-icon-caret-right"></i>
                  </el-col>
                  <el-col :span="18">
                    <el-tag v-for="(item3) in item2.children" :key="item3.id"
                    type="warning" closable @close="removeRightsById(scope.row,item3.id)">
                      {{item3.authName}}
                    </el-tag>
                  </el-col>
                </el-row>
              </el-col>
            </el-row>
          </template>
        </el-table-column>

2. 删除角色下的权限

  // 根据id 删除对应的权限
    async removeRightsById (role, rightId) {
      // 弹框提示用户是否要删除
      const confirmResult = await this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).catch(err => err)

      if (confirmResult !== 'confirm') {
        return this.$message.info('取消了删除!')
      }
      const { data: res } = await this.$http.delete(`roles/${role.id}/rights/${rightId}`)

      if (res.meta.status !== 200) {
        return this.$message.error('删除权限失败!')
      }
      role.children = res.data
    }

3. 给角色分配权限流程

  1. 实现角色分配权限对话框布局:
<!-- 分配权限对话框 -->
    <el-dialog title="分配权限" :visible.sync="setRightDialogVisible"
    width="50%">
  <span slot="footer" class="dialog-footer">
    <el-button @click="setRightDialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="setRightDialogVisible = false">确 定</el-button>
  </span>
</el-dialog>
  1. 渲染权限的树形结构,会使用到element-ui中的 el-tree组件:
// 展示分配权限的对话框
    async showSetRightDialog () {
      // 获取所有权限的数据
      const { data: res } = await this.$http.get('rights/tree')

      if (res.meta.status !== 200) {
        return this.$message.error('获取权限数据失败!')
      }
      // 把获取到的权限数据保存到data中
      this.rightsList = res.data
      console.log(this.rightsList)
      this.setRightDialogVisible = true
    }
  1. 设置默认权限菜单选中:
 // 通过递归的形式获取角色下所有三级权限的id,并保存到数组中
    getLeafKeys (node, arr) {
      if (!node.children) {
        // 如果当前是三级节点,则把id放入数组
        return arr.push(node.id)
      }
      // 如果不是三级结点,就递归去找
      node.children.forEach(item => this.getLeafKeys(item, arr))
    }
  1. 完成角色授权:
 // 点击为角色分配权限的函数
    async allowRights () {
      // 获取树形控件中,所有全选的和半选的结点的id数组
      const keys = [...this.$refs.treeRef.getCheckedKeys(),
        ...this.$refs.treeRef.getHalfCheckedKeys()]

      // console.log(keys)
      const idStr = keys.join(',')

      const { data: res } = await this.$http.post(`roles/${this.roleId}/rights`, { rids: idStr })
      if (res.meta.status !== 200) {
        return this.$message.error('分配权限失败!')
      }

      this.$message.success('分配权限成功!')

      this.getRolesList()

      this.setRightDialogVisible = false
    }

http://www.niftyadmin.cn/n/1333740.html

相关文章

某验滑块验证码逆向分析

本文章中内容仅供项目展示使用&#xff0c;不用于其他任何目的&#xff0c;逆向项目不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许…

最新某美滑块验证码分析

本文章中内容仅供项目展示使用&#xff0c;不用于其他任何目的&#xff0c;逆向项目不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许…

3. github---多人协作开发流程

1. 多人协作开发流程 A在自己的计算机中创建本地仓库A在github中创建远程仓库A将本地仓库推送到远程仓库B克隆远程仓库到本地进行开发B将本地仓库中开发的内容推送到远程仓库A将远程仓库中的最新内容拉去到本地 2. 程序员A先要做的事情 创建本地仓库创建远程仓库将本地仓库推…

某头条加密参数逆向分析

本文章中内容仅供项目展示使用&#xff0c;不用于其他任何目的&#xff0c;逆向项目不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未经许…

Vue实战之 7. 商品管理---商品分类

1. 商品分类概述 商品分类用于在购物时&#xff0c;快速找到所要购买的商品&#xff0c;可以通过电商平台主页直观地看到。 2. 商品分类列表 实现基本布局实现分类列表数据加载 // 获取商品分类数据async getCateList () {const { data: res } await this.$http.get(categor…

Vue实战之 8.商品管理 -- 分类参数

1. 参数管理概述 商品参数用于显示商品的固定的特征信息&#xff0c;可以通过电商平台详情页直观地看到。 2. 商品分类选择 1. 选择商品分类 页面基本布局加载商品分类数据实现商品分类的级联选择效果 // 获取所有的商品分类列表async getCateList () {const { data: res } …

Vue实战之 9.商品管理 -- 商品列表

1. 商品管理概述 商品管理模块用于维护电商平台的商品信息&#xff0c;包括商品的类型、参数、详情等。通过商品管理模块可以实现商品的添加、修改、展示和删除等功能。 2. 商品列表 实现商品列表布局效果调用后台接口获取商品列表数据 // 根据分页获取对应的商品列表async …

Vue实战之 10. 订单管理

1. 订单管理概述 订单管理模块用于维护商品的订单信息&#xff0c;可以查看订单的商品信息、物流信息&#xff0c;并且可以根据实际的运营情况对订单做适当的调整。 2. 订单列表 1. 订单列表展示 订单数据加载订单列表布局 // 获取订单列表async getOrderList () {const { d…