位置: IT常识 - 正文

若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统)

编辑:rootadmin
若依前后端分离版3、用户角色权限和动态菜单 文章目录一、用户角色和权限1.前端2.后端一、用户角色和权限1.前端

推荐整理分享若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:若依前后端分离二次开发,若依前后端分离 net版,若依前后端分离二次开发,若依前后端分离二次开发部署,若依前后端分离二次开发部署,若依前后端分离框架,若依前后端分离框架,若依前后端分离二次开发,内容如对您有帮助,希望把文章链接给更多的朋友!

我们通过登陆,F12进行查看发现还有getinfo和getRouters方法,我们发现若依在页面跳转的时候都会出现这两个方法,这其实就是我们在路由里边配置的东西,我们找到全局配置的src\permission.js下发现router.beforeEach

//全局管理路由的,每个页面跳转的时候都要运行router.beforeEach((to, from, next) => { NProgress.start() if (getToken()) { to.meta.title && store.dispatch('settings/setTitle', to.meta.title) /* has token*/ if (to.path === '/login') { next({ path: '/' }) NProgress.done() } else { if (store.getters.roles.length === 0) { isRelogin.show = true // 判断当前用户是否已拉取完user_info信息 store.dispatch('GetInfo').then(() => { isRelogin.show = false store.dispatch('GenerateRoutes').then(accessRoutes => { // 根据roles权限生成可访问的路由表 router.addRoutes(accessRoutes) // 动态添加可访问路由表 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 }) }).catch(err => { store.dispatch('LogOut').then(() => { Message.error(err) next({ path: '/' }) }) }) } else { next() } } } else { // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 next() } else { next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 NProgress.done() } }})

在其中呢可以找到GetInfo和GenerateRoutes,我们在src\store\modules\user.js中找到封装的GetInfo方法

// 获取用户信息 GetInfo({ commit, state }) { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar; if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 commit('SET_ROLES', res.roles) commit('SET_PERMISSIONS', res.permissions) } else { commit('SET_ROLES', ['ROLE_DEFAULT']) } commit('SET_NAME', user.userName) commit('SET_AVATAR', avatar) resolve(res) }).catch(error => { reject(error) }) }) },

其中使用commit将后端传递过来的角色和权限记录下来,给vuex进行赋值进行一个全局存储,看到若依调用了一个getInfo方法,打开src\api\login.js找到封装的方法

// 获取用户详细信息export function getInfo() { return request({ url: '/getInfo', method: 'get' })}若依前后端分离版3、用户角色权限和动态菜单(若依前后端分离做的系统)

我们知道getinfo是怎么发送的了

2.后端

直接搜索getinfo方法

@GetMapping("getInfo") public AjaxResult getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); // 角色集合 Set<String> roles = permissionService.getRolePermission(user); // 权限集合 // 用户对表单是否拥有权限进行操作(菜单中的perms是用户能控制的权限) Set<String> permissions = permissionService.getMenuPermission(user); AjaxResult ajax = AjaxResult.success(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); return ajax; }

首先通过getRolePermission方法获取到角色

public Set<String> getRolePermission(SysUser user) { Set<String> roles = new HashSet<String>(); // 管理员拥有所有权限 if (user.isAdmin()) { roles.add("admin"); } else { roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); } return roles; }

通过用户的id查询用户角色,进入selectRolePermissionByUserId方法中

public Set<String> selectRolePermissionByUserId(Long userId) { List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); Set<String> permsSet = new HashSet<>(); for (SysRole perm : perms) { if (StringUtils.isNotNull(perm)) { //获取 permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); } } return permsSet; }

发现若依用户id查询用户角色列表,针对一个用户拥有的多个角色通过for循环,获取perm中的RoleKey中的值,trim方法去除字符串首位的空格,并且通过split方法进行“,”分割,最后返回 其次通过getMenuPermission方法获取到权限

public Set<String> getMenuPermission(SysUser user) { Set<String> perms = new HashSet<String>(); // 管理员拥有所有权限 if (user.isAdmin()) { perms.add("*:*:*"); } else { List<SysRole> roles = user.getRoles(); if (!roles.isEmpty() && roles.size() > 1) { // 多角色设置permissions属性,以便数据权限匹配权限 for (SysRole role : roles) { Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); role.setPermissions(rolePerms); perms.addAll(rolePerms); } } else { perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); } } return perms; }

使用if判断是否是管理员,管理员直接返回所有权限,不是管理员则获取他的角色来进行判断,多个角色通过角色Id进行权限的查询,没有多个角色则通过用户ID进行查询

List<String> perms = menuMapper.selectMenuPermsByUserId(userId); Set<String> permsSet = new HashSet<>(); for (String perm : perms) { if (StringUtils.isNotEmpty(perm)) { permsSet.addAll(Arrays.asList(perm.trim().split(","))); } } return permsSet;

查询后结果处理相同,针对一个用户拥有的多个权限通过for循环,获取perm中的值并且通过“,”进行分割,最后返回

本文链接地址:https://www.jiuchutong.com/zhishi/287267.html 转载请保留说明!

上一篇:Node.js与相关依赖的版本对照表(nodejs应用领域)

下一篇:福克兰群岛上的南跳岩企鹅 (© Heike Odermatt/Minden Pictures)(福克兰群岛属于哪国)

  • 荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

    荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

  • 华为mate9强制恢复出厂怎么设置(华为mate9强制恢复出厂)

    华为mate9强制恢复出厂怎么设置(华为mate9强制恢复出厂)

  • 支付宝赚赏金码在哪(支付宝赚赏金码领取需要付费)

    支付宝赚赏金码在哪(支付宝赚赏金码领取需要付费)

  • msg文件可以删除吗(msg3.0.db可以删除吗)

    msg文件可以删除吗(msg3.0.db可以删除吗)

  • iphone6有暗黑模式吗(6s有暗黑模式吗)

    iphone6有暗黑模式吗(6s有暗黑模式吗)

  • 在windows中alt+tab键的作用是(在WINDOWS中回收站是)

    在windows中alt+tab键的作用是(在WINDOWS中回收站是)

  • airpods2没有发票保修吗(airpods2没有发票是真的吗)

    airpods2没有发票保修吗(airpods2没有发票是真的吗)

  • 小米10青春版发布时间(小米10青春版发热)

    小米10青春版发布时间(小米10青春版发热)

  • 华为限制安装应用权限在哪(华为限制软件下载)

    华为限制安装应用权限在哪(华为限制软件下载)

  • 苹果xs几个卡(苹果12pro max是单卡还是双卡)

    苹果xs几个卡(苹果12pro max是单卡还是双卡)

  • 苹果怎么设置下载软件需要密码(苹果怎么设置下载不需要输入ID密码)

    苹果怎么设置下载软件需要密码(苹果怎么设置下载不需要输入ID密码)

  • ip地址相同是在一起吗(ip地址怎么会相同)

    ip地址相同是在一起吗(ip地址怎么会相同)

  • 魅族手机自带录屏吗(魅族手机自带录屏功能吗)

    魅族手机自带录屏吗(魅族手机自带录屏功能吗)

  • 公众号视频怎么下载(公众号视频怎么保存到手机里)

    公众号视频怎么下载(公众号视频怎么保存到手机里)

  • word尾注怎么设置标号(word尾注怎么设置编号格式)

    word尾注怎么设置标号(word尾注怎么设置编号格式)

  • 微信怎么解除自动扣费(微信怎么解除自动扣款业务)

    微信怎么解除自动扣费(微信怎么解除自动扣款业务)

  • 淘宝亲情账号付款步骤(淘宝亲情账号付款对方有提示吗)

    淘宝亲情账号付款步骤(淘宝亲情账号付款对方有提示吗)

  • uc浏览器隐藏相册在哪(uc浏览器隐藏相册怎么弄)

    uc浏览器隐藏相册在哪(uc浏览器隐藏相册怎么弄)

  • coraloo华为什么型号(coral00华为什么型号多少钱)

    coraloo华为什么型号(coral00华为什么型号多少钱)

  • iphone11搭载什么系统(苹果11配些什么)

    iphone11搭载什么系统(苹果11配些什么)

  • 腾讯王卡有什么弊端(腾讯王卡有什么会员)

    腾讯王卡有什么弊端(腾讯王卡有什么会员)

  • word如何邮件合并(word如何邮件合并图片)

    word如何邮件合并(word如何邮件合并图片)

  • 右键新建菜单中没有新建word文档(右键新建菜单中没有文本文档怎么办)

    右键新建菜单中没有新建word文档(右键新建菜单中没有文本文档怎么办)

  • PHPCMS用哪个数据库比较好?(phpcms怎么用)

    PHPCMS用哪个数据库比较好?(phpcms怎么用)

  • 个体户要交什么税,怎样收
  • 企业收到财政局退款需要开票吗
  • 固定资产折旧会计处理
  • 小规模纳税人企业所得税怎么计算
  • 利润表的未分配利润是哪个
  • 增值税 附表三
  • 承租方支付租金会计科目
  • 计提资产减值准备金的纳税调整
  • 检测样品留样期限
  • 人力资源劳务费发票税率
  • 评估费是必须花的吗
  • 劳务费发票可以含材料费吗
  • 小规模纳税人要做账吗
  • 公司一直零报税,有问题吗
  • 公司账户境外汇款
  • 免税发票有几种类型
  • 研发支出辅助账2021版
  • 浅析税收滞纳金问题的政策法规
  • 充电话费送的
  • 业务推广费税务处理
  • 旅行社开具的发票能否作废
  • 办公室租金可以计入办公费吗
  • 支付工会经费
  • 企业能公户往个人转账吗
  • windows11永久解决蓝屏
  • cachelib
  • 如何用mac制作ppt
  • hhupd.exe
  • 借方为什么要转账
  • 房产税会计科目应该走税金及附加还是管理费用
  • php数组函数 菜鸟
  • fatal error: opencv/cv.h: 没有那个文件或目录 错误;fatal error: opencv2/contrib/contrib.hpp: 没有那个文件或目录,opencv多版本
  • 接受赠品的账务处理流程
  • 应退税款抵扣欠税款的账务处理
  • 开发商违法
  • 代境外汇款收的什么费用
  • pytorch基础
  • 没有数据企业所需的资料
  • 建筑会计和会计的区别
  • 基于Java+SpringBoot+vue+elementui药品商城采购系统详细设计实现
  • 尚未进行抄报税无法申报是什么意思
  • 所得税申报怎么弥补以前年度亏损
  • 运费已付发票未到会计分录
  • 固定资产清理年末余额怎么处理
  • 织梦发布文章栏目怎么不显示
  • 代扣代缴个人所得税分录
  • 货物不符合质量条款规定
  • 售后服务费计提政策
  • 即征即退 条件
  • 个体工商户税收新政策
  • 补提去年累计折旧
  • 哪些合同需要缴税
  • 门面转让费做账怎么做
  • 收到暂估跨年发票怎么办
  • 招待费发票怎么做分录
  • 出现事故保险公司负责协商吗
  • 公允价值模式下出售投资性房地产
  • 企业支付宝能买东西吗
  • 销售收入包含哪些费用
  • 企业材料物资的采购费用包括
  • 常见的账务处理程序主要有
  • sql2000删除
  • Linux下mysql源码安装笔记
  • mysql 错误1067
  • 打印机取消打印在哪里
  • win7自带防护软件
  • linux系统转换为win系统脚本
  • win7更新和安全在哪里
  • centos中netspeeder网络加速/优化器的安装方法
  • win8.1删除所有内容并重新安装
  • 打开字符面板
  • Unity3D游戏开发pdf
  • svn报错禁止访问
  • python3的urllib
  • 排序方法python
  • 深入python3
  • 关联企业业务往来税收调整
  • 黔南州都匀市是哪个省
  • 雅加达购物必买的东西
  • 机动驳船是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设