#I1KQUK 开放地址首页展示优化,优化查看编辑页展示及url参数,无权限时不展示对应按钮

This commit is contained in:
暮光:城中城
2020-06-16 23:13:27 +08:00
parent 0451b9319c
commit 1abcc4f92e
40 changed files with 737 additions and 534 deletions

View File

@@ -2,12 +2,17 @@ package com.zyplayer.doc.wiki.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
import com.zyplayer.doc.data.repository.manage.entity.WikiPageContent;
import com.zyplayer.doc.data.repository.manage.entity.WikiPageFile;
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
import com.zyplayer.doc.data.service.manage.WikiPageContentService;
import com.zyplayer.doc.data.service.manage.WikiPageFileService;
import com.zyplayer.doc.data.service.manage.WikiPageService;
@@ -15,6 +20,7 @@ import com.zyplayer.doc.data.service.manage.WikiSpaceService;
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.dozer.Mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,28 +52,62 @@ public class WikiOpenApiController {
@Resource
WikiPageFileService wikiPageFileService;
@Resource
WikiPageContentMapper wikiPageContentMapper;
@Resource
Mapper mapper;
@PostMapping("/space/info")
public ResponseJson<WikiSpace> spaceInfo(String space) {
UpdateWrapper<WikiSpace> wrapper = new UpdateWrapper<>();
wrapper.eq("uuid", space);
wrapper.eq("del_flag", 0);
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapper);
// 不存在或未开放
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
WikiSpace wikiSpace = this.getWikiSpace(space);
if (wikiSpace == null) {
return DocResponseJson.warn("未找到该文档");
}
return DocResponseJson.ok(wikiSpace);
}
@PostMapping("/page/news")
public ResponseJson<List<WikiPageVo>> news(SearchByEsParam param, String space) {
WikiSpace wikiSpace = this.getWikiSpace(space);
if (wikiSpace == null) {
return DocResponseJson.warn("未找到该文档");
}
String keywords = param.getKeywords();
if (StringUtils.isNotBlank(keywords)) {
param.setKeywords("%" + keywords + "%");
}
// 分页查询
param.setSpaceIds(Collections.singletonList(wikiSpace.getId()));
PageHelper.startPage(param.getPageNum(), param.getPageSize(), true);
List<SpaceNewsVo> spaceNewsVoList = wikiPageContentMapper.getNewsList(param);
PageInfo<SpaceNewsVo> pageListPageInfo = new PageInfo<>(spaceNewsVoList);
if (CollectionUtils.isNotEmpty(spaceNewsVoList)) {
spaceNewsVoList.forEach(val -> {
val.setSpace(wikiSpace.getUuid());
val.setSpaceName(wikiSpace.getName());
String preview = val.getPreviewContent();
if (preview != null) {
if (preview.length() > 200) {
preview = preview.substring(0, 200);
}
if (keywords != null) {
preview = preview.replace(keywords, "<span style=\"color:red\">" + keywords + "</span>");
}
}
val.setPreviewContent(preview);
String pageTitle = val.getPageTitle();
if (pageTitle != null && keywords != null) {
pageTitle = pageTitle.replace(keywords, "<span style=\"color:red\">" + keywords + "</span>");
}
val.setPageTitle(pageTitle);
});
}
return DocResponseJson.ok(pageListPageInfo);
}
@PostMapping("/page/list")
public ResponseJson<List<WikiPageVo>> list(String space) {
UpdateWrapper<WikiSpace> wrapperSpace = new UpdateWrapper<>();
wrapperSpace.eq("uuid", space);
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace);
// 不存在或未开放
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
WikiSpace wikiSpace = this.getWikiSpace(space);
if (wikiSpace == null) {
return DocResponseJson.warn("未找到该文档");
}
QueryWrapper<WikiPage> wrapper = new QueryWrapper<>();
@@ -88,11 +128,8 @@ public class WikiOpenApiController {
@PostMapping("/page/detail")
public ResponseJson<WikiPageContentVo> detail(String space, Long pageId) {
UpdateWrapper<WikiSpace> wrapperSpace = new UpdateWrapper<>();
wrapperSpace.eq("uuid", space);
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace);
// 不存在或未开放
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
WikiSpace wikiSpace = this.getWikiSpace(space);
if (wikiSpace == null) {
return DocResponseJson.warn("未找到该文档");
}
WikiPage wikiPageSel = wikiPageService.getById(pageId);
@@ -138,5 +175,22 @@ public class WikiOpenApiController {
}
}
}
/**
* 获取空间信息
* @param space
* @return
*/
private WikiSpace getWikiSpace(String space) {
QueryWrapper<WikiSpace> wrapperSpace = new QueryWrapper<>();
wrapperSpace.eq("uuid", space);
wrapperSpace.eq("del_flag", 0);
WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace);
// 不存在或未开放
if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) {
return null;
}
return wikiSpace;
}
}

View File

@@ -13,6 +13,7 @@ import com.zyplayer.doc.data.service.manage.*;
import com.zyplayer.doc.wiki.controller.vo.UserPageAuthVo;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
import com.zyplayer.doc.wiki.service.WikiPageAuthService;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,6 +50,8 @@ public class WikiPageAuthController {
UserAuthService userAuthService;
@Resource
AuthInfoService authInfoService;
@Resource
WikiPageAuthService wikiPageAuthService;
@PostMapping("/assign")
public ResponseJson<List<WikiPageZan>> assign(Long pageId, String authList) {
@@ -61,13 +64,9 @@ public class WikiPageAuthController {
// if (SpaceType.isPublic(wikiSpaceSel.getType())) {
// return DocResponseJson.warn("公共空间不需要编辑权限");
// }
if (!SpaceType.isPersonal(wikiSpaceSel.getType())) {
return DocResponseJson.warn("只有个人空间才可以编辑权限");
}
if (!Objects.equals(currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
if (!DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_AUTH_MANAGE.getName(), DocAuthConst.WIKI + pageId)) {
return DocResponseJson.warn("您不是创建人或没有权限修改");
}
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, pageId, currentUser.getUserId());
if (canConfigAuth != null) {
return DocResponseJson.warn(canConfigAuth);
}
List<String> authNameList = Stream.of(WikiAuthType.values()).map(WikiAuthType::getName).collect(Collectors.toList());
QueryWrapper<AuthInfo> queryWrapper = new QueryWrapper<>();

View File

@@ -14,7 +14,6 @@ import com.zyplayer.doc.data.repository.manage.mapper.WikiPageContentMapper;
import com.zyplayer.doc.data.repository.manage.mapper.WikiPageMapper;
import com.zyplayer.doc.data.repository.manage.param.SearchByEsParam;
import com.zyplayer.doc.data.repository.manage.vo.SpaceNewsVo;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.elasticsearch.entity.EsWikiPage;
import com.zyplayer.doc.data.service.elasticsearch.service.EsWikiPageService;
import com.zyplayer.doc.data.service.elasticsearch.support.EsPage;
@@ -24,7 +23,7 @@ import com.zyplayer.doc.data.utils.CacheUtil;
import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo;
import com.zyplayer.doc.wiki.controller.vo.WikiPageVo;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
import com.zyplayer.doc.wiki.service.WikiPageAuthService;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.dozer.Mapper;
@@ -68,6 +67,8 @@ public class WikiPageController {
@Resource
WikiPageMapper wikiPageMapper;
@Resource
WikiPageAuthService wikiPageAuthService;
@Resource
Mapper mapper;
@Autowired(required = false)
EsWikiPageService esWikiPageService;
@@ -133,6 +134,15 @@ public class WikiPageController {
vo.setFileList(pageFiles);
vo.setSelfZan((pageZan != null) ? 1 : 0);
vo.setSelfUserId(currentUser.getUserId());
// 上传附件、编辑、权限设置、删除 的权限
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
String canConfigAuth = wikiPageAuthService.canConfigAuth(wikiSpaceSel, wikiPageSel.getId(), currentUser.getUserId());
vo.setCanEdit((canEdit == null) ? 1 : 0);
vo.setCanDelete((canDelete == null) ? 1 : 0);
vo.setCanUploadFile((canUploadFile == null) ? 1 : 0);
vo.setCanConfigAuth((canConfigAuth == null) ? 1 : 0);
// 高并发下会有覆盖问题,但不重要~
Integer viewNum = Optional.ofNullable(wikiPageSel.getViewNum()).orElse(0);
WikiPage wikiPageUp = new WikiPage();
@@ -149,20 +159,11 @@ public class WikiPageController {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
Long id = wikiPage.getId();
WikiPage wikiPageSel = wikiPageService.getById(id);
if (wikiPageSel == null || Objects.equals(wikiPageSel.getEditType(), 1)) {
return DocResponseJson.warn("当前页面不允许编辑!");
}
// 编辑权限判断
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
// 私人空间不允许调用接口获取文章
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有权限修改该空间的文章!");
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.EDIT_PAGE.getName(), DocAuthConst.WIKI + id);
if (!pageAuth) {
return DocResponseJson.warn("您没有修改该文章的权限!");
}
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
if (canEdit != null) {
return DocResponseJson.warn(canEdit);
}
WikiPage wikiPageUp = new WikiPage();
wikiPageUp.setId(wikiPage.getId());
@@ -178,20 +179,11 @@ public class WikiPageController {
public ResponseJson<Object> delete(Long pageId) {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
WikiPage wikiPageSel = wikiPageService.getById(pageId);
if (wikiPageSel == null || Objects.equals(wikiPageSel.getEditType(), 1)) {
return DocResponseJson.warn("当前页面不允许编辑!");
}
// 删除权限判断
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
// 私人空间不允许调用接口获取文章
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有权限修改该空间的文章!");
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.DELETE_PAGE.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return DocResponseJson.warn("您没有删除该文章的权限!");
}
String canDelete = wikiPageAuthService.canDelete(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
if (canDelete != null) {
return DocResponseJson.warn(canDelete);
}
// 执行删除
WikiPage wikiPage = new WikiPage();
@@ -220,20 +212,11 @@ public class WikiPageController {
Long pageId = wikiPage.getId();
if (pageId != null && pageId > 0) {
WikiPage wikiPageSel = wikiPageService.getById(pageId);
if (wikiPageSel == null || Objects.equals(wikiPageSel.getEditType(), 1)) {
return DocResponseJson.warn("当前页面不允许编辑!");
}
// 编辑权限判断
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
// 私人空间不允许调用接口获取文章
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有权限修改该空间的文章!");
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.EDIT_PAGE.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return DocResponseJson.warn("您没有修改该文章的权限!");
}
String canEdit = wikiPageAuthService.canEdit(wikiSpaceSel, wikiPageSel.getEditType(), wikiPageSel.getId(), currentUser.getUserId());
if (canEdit != null) {
return DocResponseJson.warn(canEdit);
}
wikiPage.setSpaceId(null);
wikiPage.setEditType(null);
@@ -250,6 +233,9 @@ public class WikiPageController {
wikiPageContentService.update(pageContent, wrapper);
} else {
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPage.getSpaceId());
if (wikiSpaceSel == null) {
return DocResponseJson.warn("未找到指定的空间!");
}
// 空间不是自己的
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有权限新增该空间的文章!");

View File

@@ -8,12 +8,10 @@ import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
import com.zyplayer.doc.data.repository.manage.entity.WikiPageFile;
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.WikiPageFileService;
import com.zyplayer.doc.data.service.manage.WikiPageService;
import com.zyplayer.doc.data.service.manage.WikiSpaceService;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
import com.zyplayer.doc.wiki.service.WikiPageAuthService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
@@ -41,6 +39,8 @@ public class WikiPageFileController {
WikiSpaceService wikiSpaceService;
@Resource
WikiPageService wikiPageService;
@Resource
WikiPageAuthService wikiPageAuthService;
// @PostMapping("/list")
// public ResponseJson<List<WikiPageFile>> list(WikiPageFile wikiPageFile) {
@@ -70,16 +70,10 @@ public class WikiPageFileController {
}
WikiPage wikiPageSel = wikiPageService.getById(pageId);
WikiSpace wikiSpaceSel = wikiSpaceService.getById(wikiPageSel.getSpaceId());
// 私人空间
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
return DocResponseJson.warn("您没有该空间的文件上传权限!");
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUser.getUserId(), wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_UPLOAD.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return DocResponseJson.warn("您没有修改该文章附件的权限!");
}
// 权限判断
String canUploadFile = wikiPageAuthService.canUploadFile(wikiSpaceSel, pageId, currentUser.getUserId());
if (canUploadFile != null) {
return DocResponseJson.warn(canUploadFile);
}
if (id != null && id > 0) {
wikiPageFile.setUpdateUserId(currentUser.getUserId());

View File

@@ -12,6 +12,10 @@ public class WikiPageContentVo {
private List<WikiPageFile> fileList;
private Integer selfZan;
private Long selfUserId;
private Integer canEdit;
private Integer canDelete;
private Integer canUploadFile;
private Integer canConfigAuth;
public WikiPage getWikiPage() {
return wikiPage;
@@ -52,4 +56,36 @@ public class WikiPageContentVo {
public void setSelfUserId(Long selfUserId) {
this.selfUserId = selfUserId;
}
public Integer getCanEdit() {
return canEdit;
}
public void setCanEdit(Integer canEdit) {
this.canEdit = canEdit;
}
public Integer getCanDelete() {
return canDelete;
}
public void setCanDelete(Integer canDelete) {
this.canDelete = canDelete;
}
public Integer getCanConfigAuth() {
return canConfigAuth;
}
public void setCanConfigAuth(Integer canConfigAuth) {
this.canConfigAuth = canConfigAuth;
}
public Integer getCanUploadFile() {
return canUploadFile;
}
public void setCanUploadFile(Integer canUploadFile) {
this.canUploadFile = canUploadFile;
}
}

View File

@@ -0,0 +1,107 @@
package com.zyplayer.doc.wiki.service;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.WikiSpace;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.wiki.framework.consts.SpaceType;
import com.zyplayer.doc.wiki.framework.consts.WikiAuthType;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service
public class WikiPageAuthService {
/**
* 是否具有编辑权限
* @param wikiSpaceSel
* @param editType
* @param pageId
* @param currentUserId
* @return
*/
public String canEdit(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
return "当前页面不允许编辑!";
}
// 私人空间不允许调用接口获取文章
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
return "您没有权限修改该空间的文章!";
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.EDIT_PAGE.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return "您没有修改该文章的权限!";
}
}
return null;
}
/**
* 是否具有权限编辑权限
* @param wikiSpaceSel
* @param pageId
* @param currentUserId
* @return
*/
public String canConfigAuth(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
if (!SpaceType.isPersonal(wikiSpaceSel.getType())) {
return "只有个人空间才可以编辑权限";
}
if (!Objects.equals(currentUserId, wikiSpaceSel.getCreateUserId())) {
if (!DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_AUTH_MANAGE.getName(), DocAuthConst.WIKI + pageId)) {
return "您不是创建人或没有权限修改";
}
}
return null;
}
/**
* 是否具有附件上传权限
* @param wikiSpaceSel
* @param pageId
* @param currentUserId
* @return
*/
public String canUploadFile(WikiSpace wikiSpaceSel, Long pageId, Long currentUserId) {
// 私人空间
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
return "您没有该空间的文件上传权限!";
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.PAGE_FILE_UPLOAD.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return "您没有修改该文章附件的权限!";
}
}
return null;
}
/**
* 是否具有删除权限
* @param wikiSpaceSel
* @param editType
* @param pageId
* @param currentUserId
* @return
*/
public String canDelete(WikiSpace wikiSpaceSel, Integer editType, Long pageId, Long currentUserId) {
if (wikiSpaceSel == null || Objects.equals(editType, 1)) {
return "当前页面不允许编辑!";
}
// 私人空间不允许调用接口获取文章
if (SpaceType.isOthersPrivate(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
return "您没有权限修改该空间的文章!";
}
// 空间不是自己的,也没有权限
if (SpaceType.isOthersPersonal(wikiSpaceSel.getType(), currentUserId, wikiSpaceSel.getCreateUserId())) {
boolean pageAuth = DocUserUtil.haveCustomAuth(WikiAuthType.DELETE_PAGE.getName(), DocAuthConst.WIKI + pageId);
if (!pageAuth) {
return "您没有删除该文章的权限!";
}
}
return null;
}
}