位置: 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)(福克兰群岛属于哪国)

  • 雪容融在哪里可以买到(雪容融的资料)

    雪容融在哪里可以买到(雪容融的资料)

  • 华为畅享7S支持快充吗(华为畅享7s支持多大内存卡)

    华为畅享7S支持快充吗(华为畅享7s支持多大内存卡)

  • 抖音跟火山小视频怎么同步(抖音跟火山小视频合并了)

    抖音跟火山小视频怎么同步(抖音跟火山小视频合并了)

  • 手机保修期内哪些免费(手机保修期内哪些免费二手苹果)

    手机保修期内哪些免费(手机保修期内哪些免费二手苹果)

  • win7蓝屏代码0x000003b(win7蓝屏代码0x0000074)

    win7蓝屏代码0x000003b(win7蓝屏代码0x0000074)

  • 手机突然网速很慢是因为什么(手机突然网速很慢怎么回事?)

    手机突然网速很慢是因为什么(手机突然网速很慢怎么回事?)

  • 笔记本电脑摔了一下电脑能开机但是不显示(笔记本电脑摔了一下会坏吗)

    笔记本电脑摔了一下电脑能开机但是不显示(笔记本电脑摔了一下会坏吗)

  • nova7pro防水级别(nova7 pro 防水吗)

    nova7pro防水级别(nova7 pro 防水吗)

  • 三星显示器黑屏(三星显示器黑屏解决办法)

    三星显示器黑屏(三星显示器黑屏解决办法)

  • 该内存不能为written(该内存不能为written怎么解决?win7)

    该内存不能为written(该内存不能为written怎么解决?win7)

  • 为什么qq改密码了还是能被别人登录(为什么qq改密码qq音乐还能登录)

    为什么qq改密码了还是能被别人登录(为什么qq改密码qq音乐还能登录)

  • 手机网络被限速了怎么解决(手机网络被限速是什么意思)

    手机网络被限速了怎么解决(手机网络被限速是什么意思)

  • siri总是连接有点问题怎么解决(siri老是连接问题)

    siri总是连接有点问题怎么解决(siri老是连接问题)

  • 当前登录环境存在异常是什么意思(当前登录环境存在安全风险)

    当前登录环境存在异常是什么意思(当前登录环境存在安全风险)

  • oppoa11怎么截屏长图(oppoa11怎么截屏视频)

    oppoa11怎么截屏长图(oppoa11怎么截屏视频)

  • 苹果tp是什么意思(iops tps)

    苹果tp是什么意思(iops tps)

  • 为什么nova3下架(华为nova3为什么停产)

    为什么nova3下架(华为nova3为什么停产)

  • 腾讯视频能不能手机号登录(腾讯视频能不能下载到本地)

    腾讯视频能不能手机号登录(腾讯视频能不能下载到本地)

  • 怎么弄两个微信软件(怎么弄两个微信分身)

    怎么弄两个微信软件(怎么弄两个微信分身)

  • 手机怎么做ppt软件(手机怎么做ppt软件下载)

    手机怎么做ppt软件(手机怎么做ppt软件下载)

  • 拼多多的金猪怎样删除(拼多多金猪怎么没有了)

    拼多多的金猪怎样删除(拼多多金猪怎么没有了)

  • 开机时怎么进去pe系统(开机怎么进去高级选项菜单)

    开机时怎么进去pe系统(开机怎么进去高级选项菜单)

  • 准时化jit的含义(准时化的前提)

    准时化jit的含义(准时化的前提)

  • xr是什么基带(iphone xr是什么基带芯片)

    xr是什么基带(iphone xr是什么基带芯片)

  • oppo拍照像素怎么设置(oppo手机照相调像素)

    oppo拍照像素怎么设置(oppo手机照相调像素)

  • 金山文档怎么保存(金山文档怎么保存图片到相册)

    金山文档怎么保存(金山文档怎么保存图片到相册)

  • 如何激活Windows旗舰版(如何激活windows10没有密钥)

    如何激活Windows旗舰版(如何激活windows10没有密钥)

  • 前端Vue中实现超炫酷动态背景(全屏背景+自定义banner+登录/注册页)(vue前端开发规范)

    前端Vue中实现超炫酷动态背景(全屏背景+自定义banner+登录/注册页)(vue前端开发规范)

  • 留底退税怎么做账务处理
  • 账面成本包含增值税吗
  • 综合税率的计算方法是什么
  • 企业申报表有异常期间可以更换财务负责人吗
  • 房租收到专票账务处理
  • 房地产增值税怎么算抵扣土地款
  • 资产评估增值的会计科目
  • 房改房增值税
  • 公司收的保证金可以打入私人账户吗
  • 单位职工医疗补助
  • 多缴纳的附加税怎么退
  • 去年暂估的成本,汇算前收到的少,红冲全部暂估吗
  • 红冲的普票要给对方单位吗
  • 广告制作需要交文化建设费吗
  • 大型设备间距应至少大于几米
  • 收到子公司分红需要交所得税吗?
  • 金税盘抵减税款分录
  • 个人所得税申报退税的条件
  • 融资租赁与经营租赁的相同点
  • 小规模计提季度怎么算
  • 出口企业收到的货款是人民币还是美元
  • 出口退税系统怎么导入数据
  • 盘盈入库和其他入库
  • 无形资产的出租租金通过什么科目核算
  • 进项税额已经认证抵扣了怎么处理
  • 公司租用员工的车租车协议
  • php timestamp
  • object转map工具类
  • 杜鹃花的养殖方法和修剪
  • 库存股会计处理 会计视野
  • 加德满都治安状况如何
  • 注册资金不能到位怎么办
  • 企业出租房屋怎么做账
  • mask rcnn优点
  • php image
  • mysql desc(DESCRIBE)命令实例讲解
  • 删除组合命令
  • 什么是技术服务工程师
  • 进项发票数据导出
  • 行政单位收到银行的存款
  • 中标违约保证金怎么算
  • 资产负债表中应付账款项目应根据什么填制
  • 生产型企业如何退税
  • 坏账准备的应提数
  • 小型生产加工企业税率
  • 成本票可以用在下个季度吗
  • 股利分配是什么科目
  • 研发支出如何做账
  • 材料的采购成本包括
  • 委外研发费用如何界定
  • 补开发票交税
  • 五险一金缴纳比例2023
  • 出口退税申报系统自检数据撤销
  • 土地契税税率计算公式
  • 免抵退税额账务处理办法
  • 替其他公司支付工资怎么做账
  • 税控盘全额抵扣怎么做分录
  • 行政事业单位如何加强预算管理
  • 公司没开户需要做账吗怎么做
  • ubuntu debain
  • 过程要求可包括哪些内容
  • xp注册表损坏怎么修复
  • Win10预览版怎么变回正式版
  • ubuntu zed
  • 分区显示
  • 在Windows Server 2012中,管理员默认的用户名是
  • 苹果发布首款MR头显
  • linux中安装软件可使用哪些方式
  • shell脚本指南
  • JavaScript instanceof 的使用方法示例介绍
  • node.js使用方法
  • node.js gui
  • jQuery+ajax实现文章点赞功能的方法
  • 在javascript中
  • s='python is beautiful!'
  • 国家税务总局党建工作局
  • 企业怎么成立工会组织
  • 什么叫以物易物
  • 运输装卸费属于增值税价外费用吗
  • 美国有汽车吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设