论坛帖子管理功能实现

论坛帖子管理功能实现

功能实现 (1)点击置顶,修改帖子的类型。 (2)点击“加精”、“删除”,修改帖子的状态。 权限管理 (1)版主可以执行“置顶”、“加精”操作 (2)管理员可以执行“删除”操作。 按钮显示 (1)版主可以看到“置顶”、“加精”按钮。 (2)管理员可以看到“删除”按钮。 thymeleaf支持security,但是要升级到在thymeleaf-extras-springsecurity。 在github中搜索thymeleaf-extras-springsecurity可以查看相关文档。 mvn库里搜thymeleaf springsecurity5,粘贴到pom.xml。

实现这三个功能的基本逻辑

DAO

在DiscussPostMapper接口类里,添加

int updateType(int id,int type);

int updateStatus(int id ,int status);

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

update discuss_post set status = #{status} where id = #{id};

Service

public int updateType(int id,int type){

return discussPostMapper.updateType(id,type);

}

public int updateStatus(int id,int status){

return discussPostMapper.updateStatus(id,status);

}

Controller

//置顶,异步的

@RequestMapping(path = "/top",method = RequestMethod.POST)

@ResponseBody

public String setTop(int id){

discussPostService.updateType(id,1);

//把信息同步到es服务器中

//触发发帖事件,把新发布的帖子存到es服务器中

Event event = new Event()

.setTopic(TOPIC_PUBLISH)

.setUserId(hostHolder.getUser().getId())

.setEntityType(ENTITY_TYPE_POST)

.setEntityId(id);/*如果不修正mapper.xml中的keyproperty,这里就会有问题*/

eventProducer.fireEvent(event);//发布事件

return CommunityUtil.getJSONString(0);

}

//加精

@RequestMapping(path = "/wonderful",method = RequestMethod.POST)

@ResponseBody

public String setWonderful(int id){

discussPostService.updateStatus(id,1);

//把信息同步到es服务器中

//触发发帖事件,把新发布的帖子存到es服务器中

Event event = new Event()

.setTopic(TOPIC_PUBLISH)

.setUserId(hostHolder.getUser().getId())

.setEntityType(ENTITY_TYPE_POST)

.setEntityId(id);/*如果不修正mapper.xml中的keyproperty,这里就会有问题*/

eventProducer.fireEvent(event);//发布事件

return CommunityUtil.getJSONString(0);

}

//删除

@RequestMapping(path = "/delete",method = RequestMethod.POST)

@ResponseBody

public String setDelete(int id){

discussPostService.updateStatus(id,2); //0-正常; 1-精华; 2-删除;

//从es服务器中删除

//触发删帖事件

Event event = new Event()

.setTopic(TOPIC_DELETE)

.setUserId(hostHolder.getUser().getId())

.setEntityType(ENTITY_TYPE_POST)

.setEntityId(id);/*如果不修正mapper.xml中的keyproperty,这里就会有问题*/

eventProducer.fireEvent(event);//发布事件

return CommunityUtil.getJSONString(0);

}

对于删除操作,要新增event的消费事件

//消费删帖事件

@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());

}

前端页面

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);

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){

//删除完直接跳转到首页

location.href = CONTEXT_PATH+"/index";

}else {

alert(data.msg);

}

}

)

}

删除的逻辑是如果状态为2(删除状态的)在DAO层就不给你,那么就不能传入前端的model中

Security

SecurityConfig里面添加设置

.antMatchers(

"/discuss/top",

"/discuss/wonderful"

)

.hasAnyAuthority(

AUTHORITY_MODERATOR

)

.antMatchers(

"/discuss/delete"

)

.hasAnyAuthority(

AUTHORITY_ADMIN

)

按钮显示

新增命名空间在detail页面。影响对应权限的用户是否能看到按钮

xmlns:sec="http://www.thymeleaf.org/extras/spring-security"

后续

自己搞个取消置顶的功能

💎 相关推荐

5个实用接活平台测评:普通人如何找到靠谱项目?
亚洲365bet网址

5个实用接活平台测评:普通人如何找到靠谱项目?

📅 08-30 👁️ 6678
使用EXCEL进行数据分组分析法
365bet特点

使用EXCEL进行数据分组分析法

📅 07-11 👁️ 5263
老虎在十二生肖里为什么叫寅虎?生肖常识知多少
365平台官方版下载

老虎在十二生肖里为什么叫寅虎?生肖常识知多少

📅 08-14 👁️ 232