052医疗项目-模块五:权限设置-实现根据用户显示不同的菜单

jim_shen jim_shen     2022-08-18     545

关键词:

 

我们之前的做法是:

不管什么类型的用户登录:医院,卫生局等显示的左侧菜单都是一样的。我们在这篇文章里面就要实现不同的用户登录时显示的菜单是不同的.

 

 

我们先介绍数据库中的那几张表:那几张表和第三方系统有关。

 

 

 

 

 

 

 

这几张表对应的是

 

 

 

 

我们要查的是一个角色的菜单和菜单下的二级菜单:

我们先去看菜单表:

 

 

 我们看到bss_sys_module就是菜单表(模块表):

这个表里面存放了一级和二级菜单。我们要把一级和二级菜单都查出来:

select m1.moduleid,m1.name,m2.moduleid menuid_two,m2.name menuname_two,m2.url from bss_sys_module m1,bss_sys_module m2
where m1.parentid='0'--保证查出来的是一级菜单
and m2.parentid!='0'--保证查出来的是二级菜单
and m2.parentid=m1.moduleid--查出一级菜单下的二级菜单

结果:

 

 但是我我们要查的是:角色下的模块,所以最终的sql我们要这么写:

select m1.moduleid,m1.name,m2.moduleid menuid_two,m2.name menuname_two,m2.url from bss_sys_module m1,bss_sys_module m2
where m1.parentid='0'--保证查出来的是一级菜单
and m2.parentid!='0'--保证查出来的是二级菜单
and m2.parentid=m1.moduleid--查出一级菜单下的二级菜单
and m2.moduleid
in(

--角色范围内的菜单
select bss_sys_rolemodule.moduleid from bss_sys_role,bss_sys_rolesys,bss_sys_rolenode,bss_sys_rolemodule,bss_sys_roleoperate
where bss_sys_role.roleid=bss_sys_rolesys.roleid--知道角色在哪个系统.
and bss_sys_rolenode.rsid=bss_sys_rolesys.rsid--根据系统查找节点
and bss_sys_rolemodule.rnid=bss_sys_rolenode.rnid--节点下的model
and bss_sys_rolemodule.rmid=bss_sys_roleoperate.rmid
and bss_sys_role.roleid='A1657D9C6C7D47B59A99132A5ACE1A2E' --指定查卫生局

)
   order by m1.showorder,m2.showorder

 

 

 查询结果:

 

 

 这就是卫生局的模块权限。

 

 

同理我们看一下供货商的菜单权限:

select m1.moduleid,m1.name,m2.moduleid menuid_two,m2.name menuname_two,m2.url from bss_sys_module m1,bss_sys_module m2
where m1.parentid='0'--保证查出来的是一级菜单
and m2.parentid!='0'--保证查出来的是二级菜单
and m2.parentid=m1.moduleid--查出一级菜单下的二级菜单
and m2.moduleid
in(

--角色范围内的菜单
select bss_sys_rolemodule.moduleid from bss_sys_role,bss_sys_rolesys,bss_sys_rolenode,bss_sys_rolemodule,bss_sys_roleoperate
where bss_sys_role.roleid=bss_sys_rolesys.roleid--知道角色在哪个系统.
and bss_sys_rolenode.rsid=bss_sys_rolesys.rsid--根据系统查找节点
and bss_sys_rolemodule.rnid=bss_sys_rolenode.rnid--节点下的model
and bss_sys_rolemodule.rmid=bss_sys_roleoperate.rmid
and bss_sys_role.roleid='DD5E37F61B4D4D79BE84C3B8FCEDDAF0' --指定查供货商

)
   order by m1.showorder,m2.showorder

 

 结果如下:

 

 

 

 

写好了sql  我们就要写Mapper.

这里涉及到一个问题:我们看一级菜单对应着好几个二级菜单,也就是一对多的关系,所以我们在做映射时要注意了,我们之前在学习mybatis是学习过Mybatis的一对多的查询,

我们这里就用这个方法。用resultMap .

 <!-- 
 "menus"指的是Menu类里面的属性List<menu> menus。因为在select 语句中返回了五个查询结果,我们要把
 这五个返回结果一一映射好。这里就是在做映射。
                    column表示的是数据库里面的列,而property表示的是yycg.base.pojo.vo.menu这个类里面的属性
  -->
 <resultMap id="findMenuByroleidResultMap" type="yycg.base.pojo.vo.Menu">
    <id column="menuid" property="menuid" />----这个表示的是主键,表示menuid相同的就合并
    <result column="menuname" property="menuname" />
    <collection property="menus" ofType="yycg.base.vo.Menu">
        <result column="menuid_two" property="menuid" />
         <result column="menuname_two" property="menuname" />
         <result column="url" property="url" />
    </collection>
</resultMap>
 








<!-- 根据角色获取菜单(一、二级) --> <select id="findMenuByroleid" parameterType="java.lang.String" resultMap="findMenuByroleidResultMap" > select m1.moduleid menuid, m1.name menuname, m2.moduleid menuid_two, m2.name menuname_two, m2.url from bss_sys_module m1, bss_sys_module m2 where m2.parentid = m1.moduleid and m1.parentid = '0' and m2.parentid != '0' and m2.moduleid in( <!--角色范围内的菜单 --> select bss_sys_rolemodule.moduleid from bss_sys_role,bss_sys_rolesys,bss_sys_rolenode,bss_sys_rolemodule,bss_sys_roleoperate where bss_sys_role.roleid=bss_sys_rolesys.roleid and bss_sys_rolenode.rsid=bss_sys_rolesys.rsid and bss_sys_rolemodule.rnid=bss_sys_rolenode.rnid and bss_sys_roleoperate.rmid=bss_sys_rolemodule.rmid and bss_sys_role.roleid=#{roleid} ) order by m1.showorder,m2.showorder </select>

 

 

我们写好了Dao层之后,我们来写Service层:

    
    //取出角色id因为用户的groupid就是用户的角色id,所以可以直接从
//数据字典里面得到groupid也就是角色id
    String roleid=systemConfigService.findDictinfoByDictcode("s01", sysuser.getGroupid()).getRemark();
    
    activeUser.setSysmc(sysmc);
    
    
    //根据角色id获取菜单
//这里涉及到一个点我们取出来的是一个list但是我们却要存在一个Menu里面
//这个怎么弄,我们再设计json时就是考虑到了这一点:menus:[

//]
            List<Menu> menu_list = sysuserMapperCustom.findMenuByroleid(roleid);
            Menu menu = new Menu();
            menu.setMenus(menu_list);
            activeUser.setMenu(menu);//将用户菜单存入用户身份对象中

 

//根据角色id获取菜单
//这里在取Menu的时候,涉及到一个难点我们取出来的是一个list但是我们却要存在一个Menu里面
//这个怎么弄,我们再设计json时就是考虑到了这一点:menus:[

//]

Service写好了之后,我们来写Action.

    /**
     * 
     * 获得菜单菜单,并转换成json
     */
    @RequestMapping("/usermenu")
    public @ResponseBody  Menu usermenu(HttpServletRequest request)throws Exception
    {
        
        HttpSession session=request.getSession();
        
        ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);
        
        return    activeUser.getMenu();
        
        
        

    }

 

我们在浏览器的url中输入http://127.0.0.1:8080/yycgproject/usermenu.action就得到了json数据。

最后在页面上做修改:

 

var _menus;
    $(function() {//预加载方法
        //通过ajax请求菜单
        $.ajax({
            url : '${baseurl}usermenu.action',
            type : 'POST',
            dataType : 'json',
            success : function(data) {
                _menus = data;
                initMenu(_menus);//解析json数据,将菜单生成
            },
            error : function(msg) {
                alert('菜单加载异常!');
            }
        });

 

测试:用admin登录之后:效果如下:

只显示了超级管理员的菜单,别的菜单都不显示了。

 

测试通过。

 

051医疗项目-模块五:权限设置-用户授权

对饮系统的:  查看详情

049医疗项目-模块五:权限设置-第三方系统的接入

 我们先演示要实现的功能:单击:我们看着有三个子模块:点击模块管理:在模块管理中,我们可以设置一共有几个模块,每个模块里面有哪些具体的操作等。 角色管理:给角色分配权限。   好,我们接下来... 查看详情

用啥方法实现根据用户权限不同,主菜单显示不同的项?

参考技术A我也在做类似的问题。方法有二:1。设权限表,每次登陆时将用户名与权限表的权限比较,然后设置菜单的enable属性。2。用数据库本身的安全性。通过数据库的params属性将用户名和密码送入数据库,进入后对每张表判... 查看详情

025医疗项目-模块二:药品目录的导入导出-hssf导入类的封装

上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式。这个模式类似于xml的sax解析。需要实现一个接口,HSSFListener接口。 原理:根据excel底层存储(07以版本采用xml存储,以下版本采... 查看详情

谷粒学院权限管理模块(代码片段)

文章目录谷粒学院项目权限管理模块1.数据库表2.菜单相关操作2.1递归查询全部菜单2.2递归删除菜单2.3给角色分配权限2.4根据角色获取菜单2.5添加菜单2.6修改菜单3.角色相关操作3.1获取角色分页列表3.2其他操作4.用户相关操作4.1获... 查看详情

项目总结:中后台管理系统类(代码片段)

项目类一:中后台管理系统类中后台系统类多为内部人员使用。采用Vue+elementUI开发。技术选型的理由有以下几点:此类项目多为表单、列表、数据看板,vue生态有成熟的解决方案。产品设计风格与elementUI设计风格相近。团队成... 查看详情

django项目中的实现rbac功能(代码片段)

...,无法添加修改删除。1.在django中把rbac做成组件,到别的项目也可以直接拿来用2.在项目中新创建一个名为rbac应用,startapprbac3.在rbac应用里mode.pyl写ORM,分别是账号表,角色表,权限表,权限组表fromdjango.dbimportmodels#Createyourmodelsh... 查看详情

权限分级设置

  今天改权限bug琢磨了下权限分级的问题  需求:用户需要能创建子帐号给其他人用不能显示跟自己无关的信息逻辑:角色对应权限子账户权限<=父账号不能对自己的权限进行设置实现:通过读取当前用户,获取角色信... 查看详情

根据用户角色获取登录用户的django权限以显示/隐藏菜单

...320:16:46【问题描述】:我是django新手,正在开发一个django项目,我想根据登录用户的权限显示/隐藏菜单。我正在使用DjangoRest框架和JWT。我没有在rest_auth. 查看详情

harbor仓库的管理

Harbor仓库的管理一、登录harbor管理界面二、新建项目三、新建用户四、用户权限设置1.选择项目的成员模块2.项目中新建用户并配置权限五、以user1身份上传镜像1.在客户端登录user1用户2.给镜像打标签3.上传镜像到harbor六、harbor检... 查看详情

如何根据数据库值显示设置访问权限和显示/隐藏 div

】如何根据数据库值显示设置访问权限和显示/隐藏div【英文标题】:Howtodisplaysetaccesspermission&display/hidedivbasedondatabasevalues【发布时间】:2017-11-0421:31:34【问题描述】:我想设置访问权限页面,其中将权限设置为仅查看选定的di... 查看详情

djangoadmin实现后台多用户隔离

...模拟了一个根据用户每天输入的数据,生成可视化报表的项目。预想的是根据不同的报表类型,预设不同的数据模板。前端请求的时候发送报表类型和数据范围用户等信息到后端。后端返回数据后交给前端echart处理。花了整个下... 查看详情

jira权限管理之问题安全方案

参考技术A前面说了全局方案和项目方案,项目权限主要是设置项目的管理者、浏览者、创建、编辑、删除、被分配问题权限以及备注、时间追踪、投票、关注等权限。而针对问题的安全设置的目的是项目中的问题允许哪些人看... 查看详情

oa(权限管理初步模块)

权限管理:一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。根据权限管理的套路,我们一般从这三个角度... 查看详情

javaweb项目,想定义一个用户配置文件,启动tomcat时加载该配置文件,不同单位根据配置文件显示不同功能

...页的模块、布局都会不同,我是想用配置文件的方式启动项目,实现svn统一管理代码,不想一个单位的项目创建一个工程,这样后期通用功能优化、bug修改等重复工作就多了我理解的是既然登录首页面不同,是不是要配置不同的... 查看详情

ongl表达式中得到对象,调用对象方法(oa项目权限显示模块)

在用户是否拥有某项权限的问题 是这样解决的:用户登录之后 登录信息是保存在session域中的 通过el表达式可得到登录的对象信息 那么怎样判断用户是否拥有某项权限呢?如果没有上图中的判断那么登录或者不登... 查看详情

怎么设计用户权限管理系统数据库?要用到哪几张表?每张表都有哪些字段?

...技术B什么样的权限?菜单权限?一般用户表,角色表,模块表(或者菜单啊反正是你要权限的东西),然后角色和模块的表这是最简单的结构,用户关联角色,角色关联模块,用角色去控制权限,增删改查什么的模块表呢,就... 查看详情

019医疗项目-模块一:用户身份校验拦截器的调试

这次调试发现两个问题:主要如下:1.在嵌入的页面中,如果session过期了,跳转到登陆页面现象:登陆页面是嵌入在页面中。  解决办法:找到登录的jsp页面:login.jsp。然后修改里面的登陆提交的回调方法,问题解决:解... 查看详情