栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

7.3 使用Security实现权限控制置顶、加精、删除

7.3 使用Security实现权限控制置顶、加精、删除

置顶、加精、删除 功能实现

–点击 置顶,修改帖子的类型。

–点击“加精”、“删除”,修改帖子的状态。

1、增加修改帖子状态的Mapper和Service方法

int updateType(int id, int type);
int updateStatus(int id, int status);
    

    update discuss_post set type = #{type} where id = #{id}

2、增加处理置顶、加精、删除的Controller请求

​ 使用消息队列触发事件:因为各个中间件部署在不同的机器上,es服务器和应用服务器需要通信,网络通信需要耗时,这个时候应用服务器等待的话响应慢,所以把这个操作交给kafka去处理;

// 置顶
@RequestMapping(path = "/top", method = RequestMethod.POST)
@ResponseBody
public String setTop(int id) {
    discussPostService.updateType(id, 1);

    // 触发发帖事件
    Event event = new Event()
            .setTopic(TOPIC_PUBLISH)
            .setUserId(hostHolder.getUser().getId())
            .setEntityType(ENTITY_TYPE_POST)
            .setEntityId(id);
    eventProducer.fireEvent(event);

    return CommunityUtil.getJSONString(0);
}


// 删除
@RequestMapping(path = "/delete", method = RequestMethod.POST)
@ResponseBody
public String setDelete(int id) {
    discussPostService.updateStatus(id, 2);

    // 触发删帖事件
    Event event = new Event()
            .setTopic(TOPIC_DELETE)
            .setUserId(hostHolder.getUser().getId())
            .setEntityType(ENTITY_TYPE_POST)
            .setEntityId(id);
    eventProducer.fireEvent(event);

    return CommunityUtil.getJSONString(0);
}

3、增加消费删帖事件

 // 消费删帖事件
    @KafkaListener(topics = {TOPIC_DELETE})
    public void handleDeleteMessage(ConsumerRecord record) {
        if (record == null || record.value() == null) {
            logger.error("消息的内容为空!");
            return;
        }

        Event event = JSONObject.parseObject(record.value().toString(), Event.class);
        if (event == null) {
            logger.error("消息格式错误!");
            return;
        }

    }

4、给按钮增加点击的方法

添加隐藏文本传入帖子的id

当帖子已经置顶的时候置顶按钮变成灰色

   
   
   
   

当页面加载完成后通过选择器找到对应的按钮,并且实现其点击方法

$(function(){
    $("#topBtn").click(setTop);
    $("#wonderfulBtn").click(setWonderful);
    $("#deleteBtn").click(setDelete);
});
/ 置顶
function setTop() {
    $.post(
        CONTEXT_PATH + "/discuss/top",
        {"id":$("#postId").val()},
        function(data) {
            data = $.parseJSON(data);
            if(data.code == 0) {
                $("#topBtn").attr("disabled", "disabled");
            } else {
                alert(data.msg);
            }
        }
    );
}


// 删除
function setDelete() {
    $.post(
        CONTEXT_PATH + "/discuss/delete",
        {"id":$("#postId").val()},
        function(data) {
            data = $.parseJSON(data);
            if(data.code == 0) {
                location.href = CONTEXT_PATH + "/index";
            } else {
                alert(data.msg);
            }
        }
    );
}
权限管理

–版主可以执行“置顶”、“加精”操作。

–管理员可以执行“删除”操作。

修改Security方法,增加不同用户可以实现的不同路径。

http.authorizeRequests()
        .antMatchers(               //需要拦截的路径
                "/user/setting",
                "/user/upload",
                "/discuss/add",
                "/comment/add/**",
                "/letter/**",
                "/notice/**",
                "/like",
                "/follow",
                "/unfollow"
        )
        .hasAnyAuthority(
                AUTHORITY_USER,
                AUTHORITY_ADMIN,
                AUTHORITY_MODERATOR
        )
        .antMatchers(
                "/discuss/top",
                "/discuss/wonderful"
        )
        .hasAnyAuthority(
                AUTHORITY_MODERATOR
        )
        .antMatchers(
                "/discuss/delete",
                "/data/**"
        )
        .hasAnyAuthority(
                AUTHORITY_ADMIN
        )
        .anyRequest().permitAll()
        .and().csrf().disable();
按钮显示

–版主可以看到“置顶”、“加精”按钮。

– 管理员可以看到“删除”按钮。

1、引入Thymeleaf和Springsecurity5的依赖包


    org.thymeleaf.extras
    thymeleaf-extras-springsecurity5

2、修改页面

声明命名空间


   
   
   
   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号