DataEase二开记录--踩坑和详细步骤(三)增加权限功能

在这里插入图片描述
浏览用户只能看大屏

普通用户没有系统管理

动机

这篇文章是关于dataease的权限管理的,开源版本是没有权限管理的,任何账号看到的东西都一样,显然,这不能满足正常的使用。因此要对不同的账号做权限分层管理,不同的账号看到不同的页面,实现不同的功能

建议

建议先浏览一下前面两篇
DataEase二开记录–踩坑和详细步骤(一)
https://blog.csdn.net/weixin_45399602/article/details/129518697
DataEase二开记录–踩坑和详细步骤(二)
https://blog.csdn.net/weixin_45399602/article/details/129519155

吐槽一句,这文章刚写完,就被抄袭了,一字不差,还抹去了作者的信息。。。



开始正文

登录

先从登录开始,看一下接口

image-20230324154041373
那就去找这个接口

image-20230324161939617

接着去找对用的server

image-20230324162441156

只能找到关于登录验证的部分,说明我们找的接口有问题。那就重新看登录页面。

扫描二维码关注公众号,回复: 17375490 查看本文章

menus 似乎有东西

image-20230324162623206

继续看它的perview

image-20230324162745834
打开自己细看,能看到 仪表盘 等页面内容,似乎有东西,那就去看看这个接口。

按照上面的方法,找到 DynamicMenuApi,继续找 server,

  public List<DynamicMenuDto> menus() {
    
    
        return dynamicMenuService.load(null);
    }

很明显这就是动态加载页面的,而且参数直接给了null,也许本来是有的,这里直接给了null,那正好可以用上,符合 我们根据用户ID 来加载 页面的需求。

在 interface 层全是可以看到原来是userId的参数的,如下

List<DynamicMenuDto> load(String userId);

去对对应的impl层,看一下load具体怎么操作的

  public List<DynamicMenuDto> load(String userId) {
    
    
        List<SysMenu> sysMenus = extSysMenuMapper.querySysMenu();
        List<DynamicMenuDto> dynamicMenuDtos = sysMenus.stream().map(this::convert).collect(Collectors.toList());
        //增加插件中的菜单
        List<PluginSysMenu> pluginSysMenus = PluginUtils.pluginMenus();
        if (CollectionUtils.isNotEmpty(pluginSysMenus)) {
    
    
            pluginSysMenus = pluginSysMenus.stream().filter(menu -> menu.getType() <= 1).collect(Collectors.toList());
            List<DynamicMenuDto> pluginDtos = pluginSysMenus.stream().map(this::convert).collect(Collectors.toList());
            dynamicMenuDtos.addAll(pluginDtos);
        }
        dynamicMenuDtos = dynamicMenuDtos.stream().sorted((s1, s2) -> {
    
    
            int sortIndex1 = null == s1.getMenuSort() ? 999 : s1.getMenuSort();
            int sortIndex2 = null == s2.getMenuSort() ? 999 : s2.getMenuSort();
            return sortIndex1 - sortIndex2;
        }).collect(Collectors.toList());
        dynamicMenuDtos.sort((s1, s2) -> s1.getHidden().compareTo(s2.getHidden()));
        return buildTree(dynamicMenuDtos);
    }

秘密全都在这里了,在这里加载了所有的页面。

extSysMenuMapper.querySysMenu() 这里查了所有的页面。
看了一下对应的表 sys_menu

image-20230324164421544

一看表,这不要太爽,都拆分开来了。

思路

发现sys_menu表是把各个页面拆开的,menu_id 是页面ID,pid表示父页面ID,这个就极大的便捷了开发的方式。

利用这个表,我加了一个表sys_user_menu表,只有两个字段,menu_id 和 userLevel (表示用户等级),这里我只简单的分为两个等级,“普通用户” 和 “管理用户”。

这样只需要个用户添加一个 userLevel 字段,就可以对应起来,实现 每个用户的权限不同了。

当然对应的前端也要修改,给默认值

接着就是通过接口查看是怎么登录和加载页面的了,通过查看登录接口,以及server层,可以看到是根据登录用户信息动态加载页面的,这正好可以和前文的思路吻合。

梳理一下

整体来说,有以下几处需要改的:

①加一个sys_user_menu表

②动态加载页面的时候加一个join sys_user_menu表

③前端页面在新建用户的时候加一个选择用户等级


按照这个思路,我已经完成了简单的权限管理,实现了不同等级的用户权限不同。
具体步骤就不写了,欢迎私信我。

猜你喜欢

转载自blog.csdn.net/weixin_45399602/article/details/129751368