7.3 置顶、加精和删除

目录

DiscussPostMapper

DiscussPostService

DiscussPostController

discuss.js

配置权限SecurityConfig


导入thymeleaf-spring包

置顶加精和删除帖子的时候都需要发布帖子更新事件和删除帖子事件,主要是为了同步数据库和es服务器中的帖子数据

DiscussPostMapper


int updateType(int id, int type);

int updateStatus(int id, int status);
<update id="updateType">
    update discuss_post set type = #{type} where id = #{id}
</update>

<update id="updateStatus">
    update discuss_post set status = #{status} where id = #{id}
</update>

DiscussPostService

public int updateType(int id, int type){
    return discussPostMapper.updateType(id, type);
}

public int updateStatus(int id, int status){
    return discussPostMapper.updateStatus(id, status);
}

DiscussPostController

//加精
@RequestMapping(path = "/wonderful", method = RequestMethod.POST)
@ResponseBody
public String setWonderful(int id){
    discussPostService.updateStatus(id, 1);

    //触发发帖事件,把数据重新同步到es服务器中去
    Event event = new Event()
            .setTopic(TOPIC_PUBLISH)
            .setUserId(hostHolder.getUser().getId())
            .setEntityType(ENTITY_TYPE_POST)
            .setEntityId(id);
    eventProducer.fireEvent(event);

    //计算帖子分数
    String redisKey = RedisKeyUtil.getPostScoreKey();
    redisTemplate.opsForSet().add(redisKey, id);
    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);
}

在删除帖子的时候触发了删帖事件,增加一个消费删帖事件的方法

//消费删帖事件
@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;
    }
    elasticsearchService.deleteDiscussPost(event.getEntityId());
}

discuss.js

//表示的是等页面加载完毕后再来进行相应的处理
$(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);
            console.log(data)
            if(data.code == 0){
                $("#topBtn").attr("disabled","disabled");
            }else{
                alert(data.msg);
            }
        }
    );
}

//置顶
function setWonderful(){
    $.post(
        CONTEXT_PATH + "/discuss/wonderful",
        {"id":$("#postId").val()},
        function (data) {
            data = $.parseJSON(data);
            if(data.code == 0){
                $("#wonderfulBtn").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){
                //直接跳转到首页就可以了
               window.location.href=CONTEXT_PATH + "/index";
            }else{
                alert(data.msg);
            }
        }
    );
}
<div class="float-right">
	<input type="hidden" id="postId" th:value="${post.id}">
	<button type="button" class="btn btn-danger btn-sm" id="topBtn" th:disabled="${post.type==1}" sec:authorize="hasAnyAuthority('moderator')">置顶</button>
	<button type="button" class="btn btn-danger btn-sm" id="wonderfulBtn" th:disabled="${post.status==1}" sec:authorize="hasAnyAuthority('moderator')">加精</button>
	<button type="button" class="btn btn-danger btn-sm" id="deleteBtn" th:disabled="${post.status==2}" sec:authorize="hasAnyAuthority('admin')">删除</button>
</div>

配置权限SecurityConfig

.antMatchers(
    "/discuss/top",
    "/discuss/wonderful"
)
.hasAnyAuthority(
    AUTHORITY_MODERATOR
)
.antMatchers(
    "/discuss/delete",
    "/data/**"
)
.hasAnyAuthority(
    AUTHORITY_ADMIN
)

两点:

  • (1)服务端能真正过滤掉没有访问权限的用户
  • (2)界面友好,没有权限的话,就不应该显示对应的内容
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值