区块链技术博客
www.b2bchain.cn

【Saas-export项目】17–动态菜单(不同用户登录权限->显示不同菜单)

这篇文章主要介绍了【Saas-export项目】17–动态菜单(不同用户登录权限->显示不同菜单)的讲解,通过具体代码实例进行17219 讲解,并且分析了【Saas-export项目】17–动态菜单(不同用户登录权限->显示不同菜单)的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=17219

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

  • 动态菜单分析
    • (1)分析
    • (2)等级与模块对应关系(userdegree)
  • sql语句查询不同用户的模块权限
  • 动态菜单实现
    • (1)TestModuleService.java
    • (2-1)IModuleService.java
    • (2-2)ModuleServiceImpl.java
    • (3-1)IModuleDao.java
    • (3-2)IModuleDao.xml
  • 显示动态菜单
    • (1)UserController.java
    • (2)left_menu.jsp



动态菜单分析

(1)分析

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

(2)等级与模块对应关系(userdegree)

【Saas-export项目】17--动态菜单(不同用户登录权限->显示不同菜单)

  • degree=0
    【Saas-export项目】17--动态菜单(不同用户登录权限->显示不同菜单)
  • degree=1
    【Saas-export项目】17--动态菜单(不同用户登录权限->显示不同菜单)
  • degree=其他
    使用5张表来查询

sql语句查询不同用户的模块权限

#三种用户 # 平台管理员 -Sass菜单 degree==0 # 企业管理员 -除了Sass菜单之外的所有 degree==1 # 用户 查RBAC select * from pe_user where degree=0; # 0作为belong查模块表 select * from ss_module where belong=0 #查询企业管理员的用户 select * from pe_user where degree=1;   select * from ss_module where belong=1  #查询不在0(SaaS管理员) 1(企业管理员)之间的所有用户,其他用户(非管理员) select * from pe_user where degree not in(0,1);    # 通过id查询普通用户的模块权限(查询RBAC五张表) # 其实只需要连接3个表就可以查询数据,用户user查询角色包role,角色查模块,就可以获取到用的模块权限 # 先根据用户user表查有什么角色role,再根据role角色表查有什么模块module,用户角色表,角色模块表 # 显示内连接 # distinct 去重 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='0f1f71fe-fe7c-4a44-a952-4f08bf5aa990' order by module_id asc;  

动态菜单实现

(1)TestModuleService.java

srctestjavacomsmpservicecompany

@Test     public void test08(){         User user=new User();         user.setUserId("0f1f71fe-fe7c-4a44-a952-4f08bf5aa990");         //user.setDegree(0); //平台管理员 只能看 Sass菜单         //user.setDegree(1); //企业管理员  只能看 Sass菜单以外         user.setDegree(4);//普通用户  根据RBAC表查询         List<Module> menus=iModuleService.findModuleByUser(user);         l.info("test08 menus="+menus);     } 

(2-1)IModuleService.java

srcmainjavacomsmpservicesystemmodule

List<Module> findModuleByUser(User user); 

(2-2)ModuleServiceImpl.java

srcmainjavacomsmpservicesystemmoduleimpl

 @Override     public List<Module> findModuleByUser(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());         }     } 

(3-1)IModuleDao.java

srcmainjavacomsmpdaosystemmodule

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

(3-2)IModuleDao.xml

srcmainresourcescomsmpdaosystemmodule

<!--List<Module> findByBelong(String belong);//0:平台管理;1:企业管理-->     <select id="findByBelong" parameterType="string" resultMap="moduleMap">         select *from ss_module where belong=#{belong};     </select>      <!--List<Module> findByUserId(String userId);//使用RBAC-->     <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> 

显示动态菜单

(1)UserController.java

srcmainjavacomsmpwebcontrollersystemuser

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

(2)left_menu.jsp

srcmainwebappWEB-INFpageshome

<!-- sidebar menu: : style can be found in sidebar.less -->         <ul class="sidebar-menu">             <li class="header">菜单</li>               <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 onclick="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整理代码格式的作用 --> 

本文转自互联网,侵权联系删除【Saas-export项目】17–动态菜单(不同用户登录权限->显示不同菜单)

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 【Saas-export项目】17–动态菜单(不同用户登录权限->显示不同菜单)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们