浏览用户只能看大屏
普通用户没有系统管理
动机
这篇文章是关于dataease的权限管理的,开源版本是没有权限管理的,任何账号看到的东西都一样,显然,这不能满足正常的使用。因此要对不同的账号做权限分层管理,不同的账号看到不同的页面,实现不同的功能。
建议
建议先浏览一下前面两篇
DataEase二开记录–踩坑和详细步骤(一)
https://blog.csdn.net/weixin_45399602/article/details/129518697
DataEase二开记录–踩坑和详细步骤(二)
https://blog.csdn.net/weixin_45399602/article/details/129519155
吐槽一句,这文章刚写完,就被抄袭了,一字不差,还抹去了作者的信息。。。
开始正文
登录
先从登录开始,看一下接口
那就去找这个接口
接着去找对用的server
只能找到关于登录验证的部分,说明我们找的接口有问题。那就重新看登录页面。
menus 似乎有东西
继续看它的perview
打开自己细看,能看到 仪表盘 等页面内容,似乎有东西,那就去看看这个接口。
按照上面的方法,找到 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
一看表,这不要太爽,都拆分开来了。
思路
发现sys_menu表是把各个页面拆开的,menu_id 是页面ID,pid表示父页面ID,这个就极大的便捷了开发的方式。
利用这个表,我加了一个表sys_user_menu表,只有两个字段,menu_id 和 userLevel (表示用户等级),这里我只简单的分为两个等级,“普通用户” 和 “管理用户”。
这样只需要个用户添加一个 userLevel 字段,就可以对应起来,实现 每个用户的权限不同了。
当然对应的前端也要修改,给默认值
接着就是通过接口查看是怎么登录和加载页面的了,通过查看登录接口,以及server层,可以看到是根据登录用户信息动态加载页面的,这正好可以和前文的思路吻合。
梳理一下
整体来说,有以下几处需要改的:
①加一个sys_user_menu表
②动态加载页面的时候加一个join sys_user_menu表
③前端页面在新建用户的时候加一个选择用户等级
按照这个思路,我已经完成了简单的权限管理,实现了不同等级的用户权限不同。
具体步骤就不写了,欢迎私信我。