医药采购之权限管理

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。
权限管理设计模型
用户权限管理模型(用到5张表:权限表、角色表、用户表、角色和权限关系表、用户和角色关系表)
这里写图片描述
本系统设计:

权限表:
使用第三方用户授权系统,权限表包括:系统表、模块表、操作表

用户表:
使用groupid区分不同的用户类型
使用sysid存储用户所属单位id

角色表:
用户角色对用户类型一对一。
用户角色采用系统初始化方式在系统中初始化。

用户和角色关系表:
使用第三方用户授权系统,用户和角色关系表包括:角色和系统对应关系表,角色和部署结点对应关系表,角色和模块对应关系表,角色和操作对应关系表

用户授权第三方系统集成
使用第三方系统管理完成用户授权,通过用户session接入接口,顺利进入第三方系统页面,完成用户授权操作。
这里写图片描述
Session接入接口定义

接口名称:模块操作Session接入
接口协议:http
接口地址: http://系统管理地址? loginkeyString=
接口功能:通过接口方式进行在系统管理中进行用户认证
接口方向:药品采购系统第三方系统管理

分析:
第一步:
用户点击菜单
进入药品采购系统action,生成加密的串,组织成接口地址
第二步:转发到第三方系统
这里写图片描述
返回数据:

获取用户权限
权限管理应用:用户授权验证
菜单权限(根据用户的角色显示不同的菜单)
验证用户权限菜单
使用不同的用户登录系统,根据用户的角色获取他的权限菜单在左侧显示
用户登录成功根据用户角色从数据库查询用户的菜单权限,并将菜单权限存储至session中,实现不同用户登录显示不同的菜单
dao:
根据角色查询所有权限菜单

<!-- <id为 主键,主键相同的合并   数据库的   column="menuid  对应     java对象的property="menuid -->
<resultMap id="findMenuByroleidResultMap" type="yycg.base.pojo.vo.Menu">
    <id column="menuid" property="menuid" />
    <result column="menuname" property="menuname" />
    <!--二级菜单为一个集合collection   数据类型还是yycg.base.pojo.vo.Menu -->
    <collection property="menus" ofType="yycg.base.pojo.vo.Menu">
        <result column="menuid_two" property="menuid" />
         <result column="menuname_two" property="menuname" />
         <result column="url" property="url" />
    </collection>
</resultMap>

    <!-- 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>

  <select id="findOperatByRoleid" parameterType="java.lang.String"
    resultType="yycg.base.pojo.vo.Operation"
  >

  select bss_sys_operate.method      actionUrl,
       bss_sys_operate.operatename operationName,
       bss_sys_operate.operateid operationId
  from bss_sys_operate

 where bss_sys_operate.operateid in
       (

       <!-- 角色范围内的操作权限集合 -->
        select bss_sys_roleoperate.operateid
          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}

        )


  </select>

service :
根据角色查询所有权限菜单

    /**
     * 根据角色id获取菜单
     */
    public List<Menu> findMenuByroleid(String roleid) throws Exception {
        return sysuserMapperCustom.findMenuByroleid(roleid);
    }

    /**
     * 根据用户角色获取操作权限
     */

    @Override
    public List<Operation> findOperatByRoleid(String roleid) throws Exception {
        // TODO Auto-generated method stub
        return sysuserMapperCustom.findOperatByRoleid(roleid);

    }

action :
在登录的action 中将权限信息存在session 中

// 构建ActiveUser 用户身份信息
        ActiveUser activeUser = new ActiveUser();
        activeUser.setUserid(userid);
        activeUser.setUsername(sysuser.getUsername());
        activeUser.setGroupid(sysuser.getGroupid());
        activeUser.setSysid(sysuser.getSysid());
        activeUser.setSysmc(this.findSysMc(sysuser.getGroupid(),
                sysuser.getSysid()));// 单位名称

        // 根据角色取出菜单
        // 获得角色id

        String roleid = systemConfigService.findDictinfoByDictcode("s01",
                sysuser.getGroupid()).getRemark();

        // 根据角色id获取菜单
        List<Menu> menu_list = sysuserMapperCustom.findMenuByroleid(roleid);
        Menu menu = new Menu();
        menu.setMenus(menu_list);
        activeUser.setMenu(menu);// 将用户菜单存入用户身份对象中

        // 根据用户角色获取操作权限
        List<Operation> operations = sysuserMapperCustom
                .findOperatByRoleid(roleid);
        activeUser.setOperationList(operations);// 将用户操作权限存入用户身份对象中

        return activeUser;

在登录提交的action 中将用户信息存入session

    // 用户认证
        ActiveUser activeUser = userService.checkUserInfo(userid, pwd);
        // 将用户信息写入session
        session.setAttribute(Config.ACTIVEUSER_KEY, activeUser);
        // 欢迎xx 用户登录
        return ResultUtil.createSubmitResult(ResultUtil.createSuccess(
                Config.MESSAGE, 107, new Object[] { "" }));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值