在idea中,我们可能会遇到多表联查的情况,今天我就给大家分享一个简单便捷的方法,实现根据用户id查询角色,以及根据角色id查询权限功能,以及给角色分配权限功能,权限功能也叫菜单、资源等。
老规矩,我们先来说一下需要的软件,后端代码我一般都用idea。浏览器我选择了火狐。
话不多说,我们开始!
这两种实现其实差不多,首先,我们来完成根据用户id查询角色。
一、将数据库的数据进行填充。
1、authuser表填充,不用太多,几个就可以,如下图:
2、authrole 表填充,这个可以多一点,前面写的还可以,后面我就随便写了点,如下图:
3、authuserrole表填充,因为是user和role的关联表,我这里只写了userid和roleid,如下图:
二、完成后端的一些代码。
1、在IAuthRoleMapper接口中写好方法声明。
public List<AuthRole> selectBUserRoleByUid(int uid);
2、在AuthRoleMapper.xml中添加sql语句,代码如下:
<select id="selectBUserRoleByUid" resultMap="BaseResultMap" parameterType="int">
select * from auth_role where id IN(SELECT roleid from auth_user_role where userid=#{uid})
</select>
3、在IAuthRoleService接口中声明方法,将uid传入,代码如下:
public List<AuthRole> selectUserRolesByUid(int uid);
4、在AuthRoleServiceImpl实现类中实现此方法,代码如下:
@Override
public List<AuthRole> selectUserRolesByUid(int uid) {
return authRoleMapper.selectBUserRoleByUid(uid);
}
5、在AuthRoleController中进行页面判断,代码如下:
//根据id查询角色
@GetMapping("/user_role_list")
@ResponseBody
@CrossOrigin(origins = "*")//允许跨元请求
public HttpResult getUserRolesByUid(int uid){
List<AuthRole> list=authRoleService.selectUserRolesByUid(uid);
return new HttpResult(200,null,list,0);
}
三、打开浏览器输入网址和参数直接进行测试。
在这里我传入了uid为1的用户,查到了两个角色,如此,我实现了根据用户的id查询角色。
根据角色id查询权限功能也是一样的步骤,大家照着做就可以啦!
记下来,我们根据角色的id分配权限功能,这个就更简单啦,我们只需要在接口中声明,再在实现类中进行实现,最后在controller中进行数据的接收与传送就可以啦!接下来,跟着我一起完成吧!
一、首先,在IAuthRoleResService声明方法,这里我把类名和包名都复制上了,需要注意哦。
package com.xiaohui.cms.service;
public interface IAuthRoleResService {
/**
* 给角色分配权限功能
* @param rid
* @param resIds
*/
public boolean assignRes(int rid,int[] resIds);
}
二、在AuthRoleResServiceImpl实现类中进行实现,在这里要注意细节,比如注解、方法名称,转入的参数,都要仔细核对清楚,确保无误。
package com.xiaohui.cms.service.impl;
import com.xiaohui.cms.dao.role.AuthRoleResMapper;
import com.xiaohui.cms.entity.role.AuthRoleRes;
import com.xiaohui.cms.service.IAuthRoleResService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AuthRoleResServiceImpl implements IAuthRoleResService {
@Autowired(required = false)
private AuthRoleResMapper authRoleResMapper;
@Override
public boolean assignRes(int rid, int[] resIds) {
try {
AuthRoleRes roleRes = new AuthRoleRes();
roleRes.setRoleid(rid);
int rows = authRoleResMapper.delete(roleRes);
for (int resid : resIds) {
AuthRoleRes param = new AuthRoleRes();
param.setRoleid(rid);
param.setResid(resid);
authRoleResMapper.insert(param);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
三、在AuthRoleController中完成数据的接收与传送。
/**
* 给角色分配功能权限
* @return
*/
@GetMapping("/assign_res")
@ResponseBody
@CrossOrigin(origins = "*")
public HttpResult assignRes(int rid,int[] resIds){
boolean idOk=authRoleResService.assignRes(rid,resIds);
if (idOk){
return new HttpResult(200,null,"角色分配成功",0);
}else {
return new HttpResult(500,"分配失败,请重新分配",null,0);
}
}
四、打开火狐浏览器进行测试,注意传入参数哦!
只要浏览器上显示角色分配成功的参数,我们就算完成了这项功能了,而给用户分配角色也是一样的步骤,大家一定要学会举一反三。
文章到这里就结束了,希望可以帮到大家,大家加油。