SysLoginController三大核心功能
一、登录并获取token
SysLoginController-login接口
验证登录信息,获取token
二、getInfo获取登录人信息
Role信息
select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly,
r.status, r.del_flag, r.create_time, r.remark
from sys_role r
left join sys_user_role ur on ur.role_id = r.role_id
left join sys_user u on u.user_id = ur.user_id
left join sys_dept d on u.dept_id = d.dept_id
Menu信息
getMenuPermission
admin- :😗
select distinct m.perms
from sys_menu m
left join sys_role_menu rm on m.menu_id = rm.menu_id
left join sys_user_role ur on rm.role_id = ur.role_id
left join sys_role r on r.role_id = ur.role_id
where m.status = ‘0’ and r.status = ‘0’ and ur.user_id = #{userId}
注:菜单的管理权限说明,首先一个菜单通常对应一个页面,菜单表需要有所扩展才能更加普适
1,每个菜单对应了增删改查基本权限和其他特殊权限,每个权限对应了一个permission标识。
即菜单表保存了菜单本身和菜单代表页面可能有的权限,具体权限标识的用户则具备了对应的操作功能。
2. 菜单通过parent_id构造树形层级结构,通过compotn(“system/menu/index”)映射了前端VUE组件,从而生成了页面路由
以上两点是菜单管理及页面路由管理,功能权限管理的精髓。另外,对于同一个菜单不同的人可以查看的数据范围是不同的,这点后面会讲解。
以上getInfo接口范围了User,Roles,Menus三大信息簇,里面内容包罗万象,要熟悉其中的结构
三、getRouters获取路由信息
这里仅展示其中字段信息,children包含了所有子节点,结构与父节点相同,其效果就是界面左侧的菜单结构
component:告诉了前端页面vue路由
其他信息则包含了一个菜单的所有属性
{
“name”:“System”,
“path”:"/system",
“hidden”:false,
“redirect”:“noRedirect”,
“component”:“Layout”,
“alwaysShow”:true,
“meta”:{
“title”:“系统管理”,
“icon”:“system”,
“noCache”:false
},
“children”:[]
},路由信息
这里如何获取一个人的所有树状菜单利用递归实现,不做介绍可以参考
/**
- 根据父节点的ID获取所有子节点
- @param list 分类表
- @param parentId 传入的父节点ID
- @return String
*/
public List getChildPerms(List list, int parentId)
{
List returnList = new ArrayList();
for (Iterator iterator = list.iterator(); iterator.hasNext()😉
{
SysMenu t = (SysMenu) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentId() == parentId)
{
recursionFn(list, t);
returnList.add(t);
}
}
return returnList;
}
/**
- 递归列表
- @param list
- @param t
*/
private void recursionFn(List list, SysMenu t)
{
// 得到子节点列表
List childList = getChildList(list, t);
t.setChildren(childList);
for (SysMenu tChild : childList)
{
if (hasChild(list, tChild))
{
recursionFn(list, tChild);
}
}
}
/**
- 得到子节点列表
*/
private List getChildList(List list, SysMenu t)
{
List tlist = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext())
{
SysMenu n = (SysMenu) it.next();
if (n.getParentId().longValue() == t.getMenuId().longValue())
{
tlist.add(n);
}
}
return tlist;
}
/**
- 判断是否有子节点
*/
private boolean hasChild(List list, SysMenu t)
{
return getChildList(list, t).size() > 0 ? true : false;
}