01【若依框架】 登录权限

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值