pig 如何控制菜单权限控制

在后台菜单管理中给指定菜单添加 按钮节点 需要指定 权限标志

  1. 例如: sys_file_add、sys_file_del、sys_file_edit
    前端CRUD 会自定生成关联按钮,只需要在 computed 生命周期注入对应的权限标识。
  2. 若扩展菜单 (非增删改查),则使用vuex保存用户的权限信息,然后通过v-if 判断是否有权限,如果有权限就渲染这个dom元素。
    例如:ext_btn

前端控制

我们以 用户管理页面来讲解

  1. //按钮v-if使用
  2. <el-table-column align="center" label="操作">
  3. <template slot-scope="scope">
  4. <el-button v-if="ext_btn" size="small" type="success" @click="handleUpdate(scope.row)">扩展
  5. </el-button>
  6. </template>
  7. </el-table-column>
  8. // 变量初始化
  9. created() {
  10. this.getList();
  11. this.ext_btn = this.permissions["ext_btn"];
  12. },
  13. // 从vuex 获取保存的permissions,自定控制生成的增删改权限
  14. computed: {
  15. ...mapGetters(["permissions"])
  16. permissionList() {
  17. return {
  18. addBtn: this.vaildData(this.permissions.sys_file_add, false),
  19. delBtn: this.vaildData(this.permissions.sys_file_del, true),
  20. editBtn: this.vaildData(this.permissions.sys_file_edit, false)
  21. }
  22. }
  23. //permissions获取
  24. getUserInfo(state.token).then(response => {
  25. commit('SET_PERMISSIONS', data.permissions)
  26. })

后端权限控制

只需要在接口增加

  1. @PreAuthorize("@pms.hasPermission('XXX')")

按钮权限控制 - 图1

原理

通过获取用户菜单列表,和请求的地址和请求方法对比判断有没有权限

  1. public boolean hasPermission(HttpServletRequest request, Authentication authentication) {
  2. Object principal = authentication.getPrincipal();
  3. List<SimpleGrantedAuthority> grantedAuthorityList = (List<SimpleGrantedAuthority>) authentication.getAuthorities();
  4. boolean hasPermission = false;
  5. if (principal != null) {
  6. if (CollectionUtil.isEmpty(grantedAuthorityList)) {
  7. return hasPermission;
  8. }
  9. Set<MenuVo> urls = new HashSet<>();
  10. for (SimpleGrantedAuthority authority : grantedAuthorityList) {
  11. urls.addAll(menuService.findMenuByRole(authority.getAuthority()));
  12. }
  13. for (MenuVo menu : urls) {
  14. if (StringUtils.isNotEmpty(menu.getUrl()) && antPathMatcher.match(menu.getUrl(), request.getRequestURI())
  15. && request.getMethod().equalsIgnoreCase(menu.getMethod())) {
  16. hasPermission = true;
  17. break;
  18. }
  19. }
  20. }
  21. return hasPermission;
  22. }

❤ 问题咨询

手势点击蓝字求关注简约风动态引导关注__2022-09-07+23_18_38.gif