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"
}
]
}