2024年最全Vue角色的权限管理_vue角色权限,社招面试题

最后

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

思路:

给角色分配好权限后,将这些权限分别转为字符串形式,不同权限之间用 英文逗号 分开

  1. 当点击“分配权限”的时候,把角色id存到 roleId中
  2. 点击“确定”按钮后,将选中的权限 转为 数组,将得到的数组拼接为字符串

样式:

<!-- 底部的按钮区域 -->
      <span slot="footer" class="dialog-footer">
        <!-- 点击按钮时 对话框隐藏 -->
        <el-button @click="setRightDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="allotRights">确 定</el-button>
      </span>

数据:

data() {
    return {
      // 所有角色列表数据
      roleList: [],
      // 控制分配权限对话框的显示与隐藏
      setRightDialogVisible: false,
      // 所有权限的数据
      rightslist: [],
      // 树形控件的属性绑定规则
      treeProps: {
        label: 'authName',
        children: 'children',
      },
      // 默认选中的节点Id值数组
      // []里面是Id值
      defKeys: [],
      // 当前即将分配权限的角色id
      roleId: '',
      // 控制 添加角色对话框 的 显示与隐藏
      addDialogVisible: false,
      // 控制 修改角色对话框 的 显示与隐藏
      editDialogVisible: false,
      // 查询到的角色信息对象
      editForm: {},
      addForm: {
        roleId: '',
        roleName: '',
        roleDesc: '',
      },
    }
  }

逻辑:

// 获取所有角色的列表
    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)
    },
// 点击给角色分配权限
    async allotRights() {
      const keys = [
        ...this.$refs.treeRef.getCheckedKeys(),
        ...this.$refs.treeRef.getHalfCheckedKeys(),
      ]
      // 点击“确定”按钮后,将选中的权限 转为 数组,将得到的数组拼接为字符串
      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
    },


分配角色功能的实现

样式:

<!-- 分配权限的对话框 -->
    <el-dialog
 title="分配权限"
 :visible.sync="setRightDialogVisible"
 width="50%"
 >
      <!-- 树形控件 -->
      <!-- show-checkbox 复选框 -->
      <!-- node-key="id" 选中某个复选框,选中的是这个复选框中内容的id -->
      <!-- default-expand-all 默认展开所有结点 -->
      <el-tree
 :data="rightslist"
 :props="treeProps"
 show-checkbox
 node-key="id"
 default-expand-all
 ></el-tree>

      <!-- 底部的按钮区域 -->
      <span slot="footer" class="dialog-footer">
        <!-- 点击按钮时 对话框隐藏 -->
        <el-button @click="setRightDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="setRightDialogVisible = false"
 >确 定</el-button
 >
        <!-- <el-button type="primary">确 定</el-button> -->
      </span>
    </el-dialog>

<script>
export default {
  data() {
    return {
      // 所有角色列表数据
      roleList: [],
      // 控制分配权限对话框的显示与隐藏
      setRightDialogVisible: false,
      // 所有权限的数据
      rightslist: [],
      // 树形控件的属性绑定规则
      treeProps: {
        label: 'authName',
        children: 'children',
      },

      // 控制 添加角色对话框 的 显示与隐藏
      addDialogVisible: false,
      // 控制 修改角色对话框 的 显示与隐藏
      editDialogVisible: false,
      // 查询到的角色信息对象
      editForm: {},
      addForm: {
        roleId: '',
        roleName: '',
        roleDesc: '',
      },
    }
  },
  created() {
    this.getRolesList()
  },
  methods: {
    // 获取所有角色的列表
    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)
    },

  // 展示分配权限的对话框
    async showSetRightDialg() {
      // 获取所有权限的数据
      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
    },

  },
}
</script>


在这里插入图片描述

<!-- 分配权限的对话框 -->
    <!-- @close="setRightDialogClosed" 关闭权限管理对话框的时候,将defKeys数组清空 -->
    <el-dialog
 title="分配权限"
 :visible.sync="setRightDialogVisible"
 width="50%"
 @close="setRightDialogClosed"
 >

<!-- 树形控件 -->
      <!-- show-checkbox 复选框 -->
      <!-- node-key="id" 选中某个复选框,选中的是这个复选框中内容的id -->
      <!-- default-expand-all 默认展开所有结点 -->
      <!-- :default-checked-keys="defKeys" 默认勾选 -->
      <el-tree
 :data="rightslist"
 :props="treeProps"
 show-checkbox
 node-key="id"
 default-expand-all
 :default-checked-keys="defKeys"
 ></el-tree>

<script>
export default {
  data() {
    return {
      // 所有角色列表数据
      roleList: [],
      // 控制分配权限对话框的显示与隐藏
      setRightDialogVisible: false,
      // 所有权限的数据
      rightslist: [],
      // 树形控件的属性绑定规则
      treeProps: {
        label: 'authName',
        children: 'children',
      },
      // 默认选中的节点Id值数组
      // []里面是Id值
      defKeys: [],

      // 控制 添加角色对话框 的 显示与隐藏
      addDialogVisible: false,
      // 控制 修改角色对话框 的 显示与隐藏
      editDialogVisible: false,
      // 查询到的角色信息对象
      editForm: {},
      addForm: {
        roleId: '',
        roleName: '',
        roleDesc: '',
      },
    }
  },
  created() {
    this.getRolesList()
  },
  methods: {
    // 获取所有角色的列表
    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)
    },
    // 展示分配权限的对话框
    async showSetRightDialg(role) {
      // 获取所有权限的数据
      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)
      // 递归获取三级权限的id
      this.getLeafKeys(role, this.defKeys)
      // 显示权限管理的对话框
      this.setRightDialogVisible = true
    },
    // 通过递归的形式,获取到角色下所有三级权限的id,并保存到 defKeys 数组中
    getLeafKeys(node, arr) {
      // 如果当前 node 节点不包含children属性,则是三级节点
      if (!node.children) {
        return arr.push(node.id)
      }
      node.children.forEach((item) => {
        this.getLeafKeys(item, arr)
      })
    },
    // 监听分配权限对话框的关闭事件
    setRightDialogClosed() {
      this.defKeys = []
    }
  }
}

接口

删除角色指定权限的接口
  • 请求路径:roles/:roleId/rights/:rightId
  • 请求方法:delete
  • 请求参数
参数名参数说明备注
:roleId角色 ID不能为空携带在url中
:rightId权限 ID不能为空携带在url中
  • 响应数据说明

    • 返回的data, 是当前角色下最新的权限数据
  • 响应数据

{
    "data": [
        {
            "id": 101,
            "authName": "商品管理",
            "path": null,
            "children": [
                {
                    "id": 104,
                    "authName": "商品列表",
                    "path": null,
                    "children": [
                        {
                            "id": 105,
                            "authName": "添加商品",
                            "path": null
                        },
                        {
                            "id": 116,
                            "authName": "修改",
                            "path": null
                        }
                    ]
                }
            ]
        }
    ],
    "meta": {
        "msg": "取消权限成功",
        "status": 200
    }
}

所有权限列表接口
  • 请求路径:rights/:type
  • 请求方法:get
  • 请求参数
参数名参数说明备注
type类型值 list 或 tree , list 列表显示权限, tree 树状显示权限,参数是url参数:type
  • 响应参数
参数名参数说明备注
id权限 ID
authName权限说明
level权限层级
pid权限父 ID
path对应访问路径
  • 响应数据 type=list
  {
    "data": [
        {
            "id": 101,
            "authName": "商品管理",
            "level": "0",
            "pid": 0,
            "path": null
        },
        {
            "id": 102,
            "authName": "订单管理",
            "level": "0",
            "pid": 0,
            "path": null


### 最后

**一个好的心态和一个坚持的心很重要**,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**分享一些前端面试题以及学习路线给大家**

![](https://img-blog.csdnimg.cn/img_convert/6f91415e2573eefe44db4f3a26190d2c.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/ec781adafff10cb6fcd979f7ebf17bd9.webp?x-oss-process=image/format,png)

"authName": "订单管理",
            "level": "0",
            "pid": 0,
            "path": null


### 最后

**一个好的心态和一个坚持的心很重要**,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**分享一些前端面试题以及学习路线给大家**

[外链图片转存中...(img-9USzXNFl-1715660723981)]

[外链图片转存中...(img-RGZWQsSa-1715660723982)]

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值