权限管理的小案例
maven,webapp项目
重点步骤:
根据角色id找到角色,然后通过角色-权限关联表 找到 当前角色的权限;
然后根据user中的roleId找到角色;
这样就可以给个user找他的 相关 权限。
-
pom.xml下载依赖包
-
项目 目录管理
-
连接数据库,生成pojo
-
通过角色ID查询权限(中间表roleaccess)
RoleAccessMapper.java
public interface RoleAccessMapper {
/**
* 通过角色ID查询权限
*/
List<Access> findAccessByRoleId(Integer roleId);
}
RoleAccessMapper.xml
<mapper namespace="com.java201.dao.RoleAccessMapper">
<resultMap id="roleAccessMap" type="Access">
<id column="id" property="id"/>
<result property="accessName" column="accessName"/>
<result property="accessLevel" column="accessLevel"/>
<result property="accessUrl" column="accessUrl"/>
<result property="accessParentId" column="accessParentId"/>
</resultMap>
<select id="findAccessByRoleId" resultMap="roleAccessMap">
select * from roleaccess ra left join access a on ra.accessId=a.id
where ra.roleId=#{roleId}
</select>
</mapper>
- 通过角色ID查询角色
Role.java
public class Role {
private Integer id;
private String roleName;
private String roleDesc;
private Integer isSuper;
/**
* 角色拥有权限
* @return
*/
private List<Access> accesses;
// (加上getter/setter方法)
RoleMapper.java
public interface RoleMapper {
/**
* 通过角色ID查询角色
*/
Role findByRoleId(Integer id);
}
RoleMapper.xml
<mapper namespace="com.java201.dao.RoleMapper">
<resultMap id="roleMap" type="Role">
<id column="id" property="id"/>
<result property="roleName" column="roleName"/>
<result property="roleDesc" column="roleDesc"/>
<result property="isSuper" column="isSuper"/>
<!-- 多对多-->
<collection property="accesses" column="id" ofType="Access"
select="com.java201.dao.RoleAccessMapper.findAccessByRoleId"/>
</resultMap>
<!-- 通过角色id查询角色-->
<select id="findByRoleId" resultMap="roleMap">
select * from role where id=#{id}
</select>
</mapper>
- 根据用户查询角色
User.java中添加:
/**
用户拥有的角色
*/
private Role role;
UserMapper.java
public interface UserMapper {
User findUserById(Integer id);
}
UserMapper.xml
<mapper namespace="com.java201.dao.UserMapper">
<resultMap id="userMap" type="User">
<id column="id" property="id"/>
<result property="userName" column="userName"/>
<result property="userName" column="userName"/>
<result property="userPwd" column="userPwd"/>
<result property="userPhone" column="userPhone"/>
<result property="userAddTime" column="userAddTime"/>
<result property="roleId" column="roleId"/>
<!-- 一对一-->
<association property="role" column="roleId" javaType="Role"
select="com.java201.dao.RoleMapper.findByRoleId"/>
</resultMap>
<select id="findUserById" resultMap="userMap">
select * from user where id=#{id}
</select>
</mapper>
- 测试
public class MyBatisTest {
/**
* 角色关联权限
*/
@Test
public void test01() {
SqlSession session = MybatisUtil.getSession();
RoleMapper mapper = session.getMapper(RoleMapper.class);
Role role = mapper.findByRoleId(6);
System.out.println(role);
}
/**
* 查询用户---角色----权限
*/
@Test
public void test02() {
SqlSession session = MybatisUtil.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findUserById(4);
System.out.println(user);
}
}
- 结果
注意:实体类都要添加重写toString方法