【SaaS - Export项目】用户登录之后的动态菜单,不同的权限显示不同的页面

动态菜单分析

不同的用户进入主页,看到的左侧菜单是不同的其实,根据用户等级degree与RBAC查询普通用户的权限

等级与模块的对应关系

》如果User的degree=0, 说明是saas管理员,查询saas管理员所属模块
》如果User的degree=1, 说明是租用企业的管理员,查询租用企业的管理员所属模块
》其他的用户类型。统一根据用户的userId查询RBAC的表,查询其拥有的模块。(先看效果)

全部显示时

在这里插入图片描述

degree=0 saas管理员

在这里插入图片描述

degree=1 租用企业的管理员

在这里插入图片描述

degree=其他 其他的用户类型

使用5张表来查询
在这里插入图片描述

Sql

# user_id='002108e2-9a10-4510-9683-8d8fd1d374ef'
# saas管理员,查询saas管理员所属模块
select *
from pe_user
where degree='0'
# 企业管理的权限
select * from ss_module  where belong='0'

# 租用企业的管理员,查询租用企业的管理员所属模块
select * from pe_user where degree=1;
select * from ss_module where belong=1

select * from pe_user where degree not in(0,1);

select
  distinct m.*
from pe_role_module rm
  inner join pe_role_user ru
    on rm.role_id = ru.role_id
  inner join ss_module m
    on rm.module_id = m.module_id
  where ru.user_id='002108e2-9a10-4510-9683-8d8fd1d374ef' order by module_id asc

代码实现

TestModuleService

@Test
    public void test08(){

       User user = new User();
       user.setUserId("0f1f71fe-fe7c-4a44-a952-4f08bf5aa990");
       //user.setDegree(0);
       //user.setDegree(1);//企业管理员
       user.setDegree(4);//普通用户
        //一个 Module对象 就是左侧栏上的一个菜单项
       List<Module> menus = iModuleService.findModulesByUser(user);
       l.info("test08 menus="+menus);

    }

ModuleServiceImpl


    @Override
    public List<Module> findModulesByUser(User user) {
        //degree ==0 平台管理员 只能看 Sass菜单
        //degree ==1 企业管理员 只能看 Sass菜单以外
        //degree ==其他 用户员 根据RBAC表查询
        //给一个用户数据到service,service自己判断
        if (user.getDegree() == 0) {//平台管理员
            return iModuleDao.findByBelong("0");
        } else if (user.getDegree() == 1) {//企业管理员
            return iModuleDao.findByBelong("1");
        } else {
            return iModuleDao.findByUserId(user.getUserId());
        }
    }

IModuleDao

 List<Module> findByBelong(String belong);//0平台管理1企业管理
    List<Module> findByUserId(String userId);//使用RBAC

IModuleDao.xml

<select id="findByBelong" parameterType="string" resultMap="moduleMap">
        select * from ss_module where belong = #{belong};
    </select>

    <select id="findByUserId" parameterType="string" resultMap="moduleMap">
            select distinct  m.*
            from
            pe_role_user ru
            inner join pe_role_module rm on ru.role_id=rm.role_id
            inner join ss_module m       on m.module_id=rm.module_id
            where ru.user_id=#{userId}
            order by module_id asc;
    </select>

UserController

    //保存用户信息
                session.setAttribute("loginUser",user);
                //一个 Module对象 就是左侧栏上的一个菜单项
                List<Module> menus = iModuleService.findModulesByUser(user);
                session.setAttribute("menus",menus);

jsp

如果module对象的ctype==0表示一级菜单 ,其他的就是二级菜单

   <c:forEach items="${sessionScope.menus}" var="item">
                <c:if test="${item.ctype==0}">
                    <li class="treeview">
                            <%--一级菜单 --%>
                        <a href="#">
                            <i class="fa fa-cube"></i> <span>${item.name}</span>
                            <span class="pull-right-container"><i class="fa fa-angle-left pull-right"></i></span>
                        </a>
                        <ul class="treeview-menu">
                            <c:forEach items="${sessionScope.menus}" var="item2">
                                <%--           一级菜单的ctype==0 二级菜单的ctype==1--%>
                                <%--           二级的parentId肯定与一级的moduleId是相等,才能显示在该菜单下面--%>
                                <c:if test="${item2.ctype==1 && item2.parentId == item.moduleId}">
                                    <%--  二级菜单 --%>
                                    <li id="${item2.moduleId}">
                                        <!-- 此处的链接 先加项目地址再加数据库中的curl-->
                                        <a οnclick="setSidebarActive(this)" href="${path}/${item2.curl}"
                                           target="iframe">
                                            <i class="fa fa-circle-o"></i>${item2.name}
                                        </a>
                                    </li>
                                </c:if>
                            </c:forEach>
                        </ul>
                    </li>
                </c:if>
            </c:forEach>
            <!--Ctrl+Alt+L整理代码格式的作用 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值