随着spring cloud项目越做越多,接触到很多以前没接触过的知识。
这次接触到的是权限管理方面的任务。
我涉及到的权限管理分为一下几种:
1、菜单权限
2、角色权限
3、接口权限
4、数据权限
无论是什么类型的权限,数据库的设计极为重要!!
这次先分享一下菜单权限、角色权限的实现以及数据库的设计
首先是菜单的数据库设计:
字段名 | 类型 | 注释 |
---|---|---|
menu_id | int | 菜单Id |
menu_name | varchar | 菜单名称 |
menu_key | varchar | 菜单标识 |
component | varchar | 菜单布局 |
parent_id | int | 父菜单布局 |
target | varchar | 打开方式 |
order_num | int | 显示顺序 |
menu_type | char | 菜单类型(M目录 C菜单 F按钮) |
visible | int | 菜单状态(0显示 1隐藏) |
perms | varchar | 权限标识 |
path | varchar | 链接 |
redirect | varchar | 重定向 |
hidden_children | int | 强制菜单显示为Item而不是SubItem |
hidden_header | int | 特殊 隐藏 PageHeader 组件中的页面带的 面包屑和页面标题栏 |
create_by | varchar | 创建者 |
create_time | datetime | 创建时间 |
update_by | varchar | 更新者 |
update_time | datetime | 更新时间 |
remark | varchar | 备注 |
这边给出目录和菜单的定义:
当某个菜单定义为目录或菜单时,menu_key菜单标识和component菜单布局,一定要有!!!!他是用来前端对接使用的。如果按钮的权限要求不是那么严格,那么按钮这两个字段可以不要。
然后是角色数据库的设计:
这里参考了若依的角色权限设计,role_key角色权限字符串的作用暂时未知。
有了这两个表,以及这两张表主键的关联表之后。菜单权限就算完成大半了。接下来就是给前端提供查询菜单权限的接口了,sql语句请自行编写。
public List<ResUserMenuListVO> selectMenusByUser()
{
List<ResUserMenuListVO> menus = new LinkedList<>();
// 判断登录的角色
//如果是管理员,则显示所有菜单信息
if (AuthUtil.isAdmin())
{
menus = menuMapper.selectMenuNormalAll();
}
//如果是其他角色,就通过角色,查询出所有菜单参数
else
{
menus = menuMapper.selectMenusByUserId(AuthUtil.getCurrentId());
}
// 前端自行构造菜单树
return menus;
}
到此,就完成了菜单权限、角色权限。其他对菜单、角色的增删改查,请自行编写。这里就给出实现的关键步骤。