目标
- 用户添加时给用户赋角色
- 用户登录时根据角色显示不同的菜单
用户添加时给用户赋角色
1、FindAllRoleServlet(/findAllRole)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查询t_role里所有的信息,做为一个list传到前台下拉列表数据备用
IRoleService roleservice=new RoleServiceImpl();
List<SysRole> roleList = null;
try {
roleList = roleservice.findAll();
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//roleid rolename
//把list包装成resp
ResponseBean resp=new ResponseBean();
//转成json,传到前台
resp.setList(roleList);
ObjectMapper om=new ObjectMapper();
String json=om.writeValueAsString(resp);
System.out.println(json);
response.getWriter().write(json);
}
2、前台register.vue增加角色下拉列表
<el-form-item label="角色">
<el-select v-model="ruleForm.power" placeholder="请选择角色">
<el-option
v-for="role in roleList"
:key="role.roleId"
:label="role.roleName"
:value="role.roleId">
</el-option>
</el-select>
</el-form-item>
return {
roleList:[],
ruleForm: {
。。。。
power:''
},
mounted(){
this.$axios.get("http://localhost:8082/vue-servlet/findAllRole")
.then(response=>{
console.log(response);
this.roleList=response.data.list;
})
}
3、用户注册时,后台获取角色 id
@WebServlet("/regServlet")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取前台的请求参数
String username=request.getParameter("username");
String password=request.getParameter("pass");
String email=request.getParameter("email");
String idcard=request.getParameter("idcard");
String type=request.getParameter("typestr");
String roleid=request.getParameter("power");
//@TODO 进行必要的验证
//@TODO 调用service进行处理---dao---jdbc
//给前台一个响应结果
response.getWriter().print("success");
}
根据用户的角色显示不同的菜单
查询该用户的菜单权限
简洁方法
新建视图:v_role_menu_parent
select a.*,b.parentid
from t_role_menu a,t_menu b
where a.menuid=b.menuid
读取菜单
父菜单
select *
from t_menu
where visible=0 and parentID=0
and parentid in(select parentid from v_role_menu_parent where roleid='5d8b69537ca04463ba1db331dfb231d0')
子菜单
select * from t_menu
where visible=0 and parentid=2
and menuid in (select menuid from t_role_menu where roleid='5d8b69537ca04463ba1db331dfb231d0')
改造FindMenuByParentId
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取页面传输的parentId
String parentId=request.getParameter("parentId");
//调用后台查询
IMenuService us = new MenuServiceImpl();
List<SysMenu> menuList=null;
try {
HttpSession session=request.getSession();
User u=(User) session.getAttribute("user");
String role=u.getPower();
//menuList = us.getMenuList(parentId);
menuList = us.getMenuListByRole(parentId,role);
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//拼装response对象
ResponseBean resp=new ResponseBean();
resp.setList(menuList);
resp.setCode("0");
//转json
ObjectMapper om=new ObjectMapper();
String json=om.writeValueAsString(resp);
System.out.println(json);
//打印到前台
response.getWriter().print(json);
}
新增加查询方法
@Override
public List<SysMenu> getMenuListByRole(String parentId,String role) throws SQLException, ClassNotFoundException {
List<SysMenu> list=new ArrayList();
Connection conn=DBUtil.getConnection();
PreparedStatement ps=null;
ResultSet rs=null;
String sql="";
if(parentId.equals("0")){
sql="select * from t_menu where visible=0 and parentID=? and parentid in(select parentid from v_role_menu_parent where roleid=?)";
}else{
sql="select * from t_menu where visible=0 and parentID=? and menuid in(select menuid from v_role_menu_parent where roleid=?)";
}
try {
ps=conn.prepareStatement(sql);
ps.setInt(1, Integer.parseInt(parentId));
ps.setString(2, role);
rs=ps.executeQuery();
while(rs.next()){//如果有该用户
SysMenu obj=new SysMenu();
obj.setMenuId(rs.getInt("menuId"));
obj.setMenuName(rs.getString("menuName"));
obj.setPath(rs.getString("path"));
obj.setIcon(rs.getString("icon"));
obj.setVisible(rs.getString("visible"));
obj.setParentId(rs.getInt("parentId"));
obj.setParentName(rs.getString("parentName"));
obj.setOrderNum(rs.getString("orderNum"));
list.add(obj);
}
} catch (SQLException e) {
e.printStackTrace();
}
DBUtil.closeDB(rs, ps, conn);
return list;
}
效果
普通管理员
image.png
超级管理员
image.png










网友评论