用户如何实现菜单权限控制

1.数据库表设计

   1.1菜单权限控制涉及到的表:

1.用户表:t_user(主要字段:user_id、user_name)       

2.角色表:t_role(主要字段:role_id、role_name)

3.用户角色表:t_user_role(主要字段:user_id、role_id) #一对多

4.角色菜单表:t_role_menu(主要字段:role_id、menu_id)#一对多

 #菜单id、菜单名称、菜单级别(一级、二级、三级)、菜单父类id、菜单url

5.菜单表:t_menu(主要字段:menu_id|menu_name|menu_level|menu_parent_id|menu_url)

1.2简单描述

        首先通过给角色配置菜单,其次给用户分配角色,最后通过查询用户表、角色表以及菜单表之前的关系,可以查询到用户所属的菜单权限,从而达到权限控制。

2.前端如何给角色分配权限

      首先查询所有菜单权限,再查询当前角色权限,最后分配角色权限给当前角色(新增或者修改)

#前端效果图

3.后台如何控制菜单是否有权限以及查询权限菜单数据(多级菜单)

3.1 后台登录权限问题

       首先用户登录会把用户信息(用户姓名、昵称等)、用户所属菜单权限信息放入会话中,

       其次通过拦截器判断当前url是否在会话url中,存在则有访问权限,否则提示没有访问权限。

3.2 java后台mybatics查询菜单权限

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bard.base.daos.tables.RightDao" >
  <resultMap id="RightMap" type="com.bard.base.entitys.RightNode">
  	<id column="id" property="id" jdbcType="INTEGER" />
    <result column="right_name" property="name" jdbcType="VARCHAR" />
    <result column="description" property="description" jdbcType="VARCHAR" />
    <result column="right_url" property="rightUrl" jdbcType="VARCHAR" />
    <result column="parent_right" property="pId" jdbcType="INTEGER" />
    <result column="right_level" property="rightLevel" jdbcType="INTEGER" />
    <collection column="id" property="children" ofType="com.bard.base.entitys.RightNode" javaType="ArrayList" select="getChildrenInfoById">
    </collection>
  </resultMap>
  
  <select id="getChildrenInfoById" parameterType="java.lang.String" resultMap="RightMap">
  	select id,right_name,description,right_url,parent_right,right_level
  	from t_right
  	where parent_right = #{id}
  </select>
  
  <select id="selectAllRights" resultMap="RightMap">
  	SELECT * 
  	FROM t_right 
  	where right_level='1' 
  	order by id 
  </select>
  
</mapper>

响应json格式报文:

{
    "description": "工程管理",
    "handler": {},
    "id": 7,
    "name": "工程管理",
    "pId": 0,
    "rightLevel": 1,
    "rightUrl": "/manager/queryengineering.do",
    "children": [
        {
            "children": [
                {
                    "children": [],
                    "description": "工程管理站点列表",
                    "handler": {},
                    "id": 15027,
                    "name": "工程管理站点列表",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/queryengineeringlist.do"
                },
                {
                    "children": [],
                    "description": "工程管理站点编辑新增",
                    "handler": {},
                    "id": 15028,
                    "name": "工程管理站点编辑新增",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/addengineering.do,/manager/queryaddengineering.do"
                },
                {
                    "children": [],
                    "description": "工程管理站点删除",
                    "handler": {},
                    "id": 15029,
                    "name": "工程管理站点删除",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/deleteengineeringlist.do,/manager/deleteengineeringone.do"
                },
                {
                    "children": [],
                    "description": "工程管理站点保存",
                    "handler": {},
                    "id": 15030,
                    "name": "工程管理站点保存",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/saveengineering.do"
                },
                {
                    "children": [],
                    "description": "工程管理区间列表",
                    "handler": {},
                    "id": 16012,
                    "name": "工程管理区间列表",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/querysectionlist.do"
                },
                {
                    "children": [],
                    "description": "工程管理区间删除",
                    "handler": {},
                    "id": 16013,
                    "name": "工程管理区间删除",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/deletesectionlist.do,/manager/deletesectionone.do"
                },
                {
                    "children": [],
                    "description": "工程管理区间编辑新增",
                    "handler": {},
                    "id": 16014,
                    "name": "工程管理区间编辑新增",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/addsection.do,/manager/queryaddsection.do"
                },
                {
                    "children": [],
                    "description": "工程管理区间保存",
                    "handler": {},
                    "id": 16015,
                    "name": "工程管理区间保存",
                    "pId": 15018,
                    "rightLevel": 3,
                    "rightUrl": "/manager/savesection.do"
                }
            ],
            "description": "工程管理模块",
            "handler": {},
            "id": 15018,
            "name": "工程管理模块",
            "pId": 7,
            "rightLevel": 2,
            "rightUrl": "/manager/queryengineering.do"
        }
    ]
}

  • 33
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值