继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第12天 权限查询接口

weishiba
关注TA
已关注
手记 21
粉丝 1
获赞 4

一、课程介绍
【课程名称】SpringBoot 2.x 实战仿B站高性能后端项目。
【章节】第三章3.33、3.34 操作权限&菜单权限
【讲师】HELLOSTAR

二、课程内容
1.开发准备
实际权限控制的接口开发,关联类型表的Java类中定义冗余字段,方便一次存储两张表的查询结果。
比如下面的角色权限表的Java类中保存了角色表中的角色名称和角色编码,就是为了将关联查询到的角色表数据一并保存。
如果为了实体类的准确性,可以不在实体类中加冗余字段,而是重新建一个实体类带上冗余字段。专门做这种用途。这种是不是也可行?

public class UserRole {
    private Long id;
    private Long userId;
    private Long roleId;
    
    //冗余字段(角色名称)存储角色名称
    private String roleName;
    //冗余字段(角色编码)
    private String roleCode;

2.接口编写
实现接口
根据用户id查询该用户所拥有的所有权限。
实现过程
新建用户权限类,存储不同的权限。如下

List<AuthRoleElementOperation> roleElementOperationList;
List<AuthRoleMenu> roleMenuList;

根据用户id查询用户所有的角色role集合;
根据auth_role_element_operation(角色操作权限表)的关联性查询当前用户角色的所有元素操作权限;
根据auth_role_menu(角色菜单权限表)的关联性查询当前用户角色的所有菜单操作权限。

查询元素操作权限的示例xml文件代码如下:

<resultMap id="AuthElementOperationResultMap" type="com.imooc.bilibili.domain.auth.AuthRoleElementOperation">
        <id column="id" property="id"/>
        <id column="roleId" property="roleId"/>
        <id column="elementOperationId" property="elementOperationId"/>
        <association property="authElementOperation" javaType="com.imooc.bilibili.domain.auth.AuthElementOperation">
            <id column="elementName" property="elementName"/>
            <id column="elementCode" property="elementCode"/>
            <id column="operationType" property="operationType"/>
        </association>
    </resultMap>

    <select id="getRoleElementOperationsByRoleIds" parameterType="java.util.Set" resultMap="AuthElementOperationResultMap">
        select
            areo.*,
            aeo.elementName,
            aeo.elementCode,
            aeo.operationType
        from
            t_auth_role_element_operation areo
            left join t_auth_element_operation aeo on areo.elementOperationId = aeo.id
        where
            areo.roleId in
            <foreach collection="roleIdSet" item="roleId" index="index" open="(" close=")" separator=",">
                #{roleId}
            </foreach>
    </select>

三、课程收获
mybatis接口方法中的传入参数如果是集合或者set集合的话,需要使用注解@Params("")命名参数,xml文件中才能获取到参数。
mybatis查询结果如果是多个类的字段,返回类型使用ResultMap 映射关联表中的字段。

<resultMap id="AuthElementOperationResultMap" type="com.imooc.bilibili.domain.auth.AuthRoleElementOperation">
        <id column="id" property="id"/>
        <id column="roleId" property="roleId"/>
        <id column="elementOperationId" property="elementOperationId"/>
        <association property="authElementOperation" javaType="com.imooc.bilibili.domain.auth.AuthElementOperation">
            <id column="elementName" property="elementName"/>
            <id column="elementCode" property="elementCode"/>
            <id column="operationType" property="operationType"/>
        </association>
    </resultMap>

四、学习过程
图片描述
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP