提交 f757035b 编写于 作者: O o2null

Merge branch 'feature/cms增加根据id列表查询doc数据接口' into 'wrdp'

[内容管理]增加根据id列表查询doc数据接口

See merge request o2oa/o2oa!1995
package com.x.cms.assemble.control.jaxrs;
import com.x.base.core.project.jaxrs.ManagerUserJaxrsFilter;
import com.x.base.core.project.jaxrs.CipherManagerUserJaxrsFilter;
import javax.servlet.annotation.WebFilter;
......@@ -40,6 +40,6 @@ import javax.servlet.annotation.WebFilter;
"/jaxrs/commend/*",
"/servlet/*"
}, asyncSupported = true)
public class CmsJaxrsFilter extends ManagerUserJaxrsFilter {
public class CmsJaxrsFilter extends CipherManagerUserJaxrsFilter {
}
\ No newline at end of file
package com.x.cms.assemble.control.jaxrs.document;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.bean.WrapCopier;
import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.cache.Cache;
import com.x.base.core.project.cache.CacheManager;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.cms.assemble.control.Business;
import com.x.cms.core.entity.Document;
import com.x.cms.core.entity.content.Data;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class ActionQueryListDocumentData extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionQueryListDocumentData.class);
protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
Wi wi = this.convertToWrapIn( jsonElement, Wi.class );
Business business = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
business = new Business(emc);
}
List<Wo> wos = new ArrayList<>();
if(wi.getDocIds()!=null && !wi.getDocIds().isEmpty()) {
wos = getDocumentQueryResult(business, wi.getDocIds(), effectivePerson);
}
result.setData(wos);
return result;
}
private List<Wo> getDocumentQueryResult(Business business, List<String> ids, EffectivePerson effectivePerson) throws Exception {
List<Wo> wos = new ArrayList<>();
Wo wo = null;
List<Document> docs = documentQueryService.list(ids);
List<String> unitNames = userManagerService.listUnitNamesWithPerson(effectivePerson.getDistinguishedName());
List<String> groupNames = userManagerService.listGroupNamesByPerson(effectivePerson.getDistinguishedName());
for (Document document : docs){
if(this.hasReadPermission(business, document, unitNames, groupNames, effectivePerson, null)) {
Cache.CacheKey cacheKey = new Cache.CacheKey(this.getClass(), document.getId());
Optional<?> optional = CacheManager.get(cacheCategory, cacheKey);
if (optional.isPresent()) {
wo = (Wo)optional.get();
} else {
wo = new Wo();
WoDocument woOutDocument = WoDocument.copier.copy(document);
wo.setDocId(document.getId());
wo.setDocument(woOutDocument);
wo.setData(documentQueryService.getDocumentData(document));
CacheManager.put(cacheCategory, cacheKey, wo);
}
wos.add(wo);
}
}
return wos;
}
public static class Wo extends GsonPropertyObject {
@FieldDescribe( "文档ID." )
private String docId;
@FieldDescribe( "作为输出的CMS文档数据对象." )
private WoDocument document;
@FieldDescribe( "文档所有数据信息." )
private Data data;
public String getDocId() {
return docId;
}
public void setDocId(String docId) {
this.docId = docId;
}
public WoDocument getDocument() {
return document;
}
public void setDocument( WoDocument document) {
this.document = document;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
}
public static class WoDocument extends Document {
private static final long serialVersionUID = -5076990764713538973L;
public static List<String> Excludes = new ArrayList<String>();
public static WrapCopier<Document, WoDocument> copier = WrapCopierFactory.wo( Document.class, WoDocument.class, null,JpaObject.FieldsInvisible);
}
public static class Wi extends GsonPropertyObject {
@FieldDescribe( "文档id" )
private List<String> docIds = new ArrayList<>();
public List<String> getDocIds() {
return docIds;
}
public void setDocIds(List<String> docIds) {
this.docIds = docIds;
}
}
}
\ No newline at end of file
package com.x.cms.assemble.control.jaxrs.document;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WrapBoolean;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.organization.Person;
import com.x.base.core.project.tools.ListTools;
import com.x.cms.core.entity.AppInfo;
import com.x.cms.core.entity.CategoryInfo;
import com.x.cms.assemble.control.Business;
import com.x.cms.core.entity.Document;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class ActionQueryPermissionReadDocument extends BaseAction {
......@@ -19,6 +16,10 @@ public class ActionQueryPermissionReadDocument extends BaseAction {
protected ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, String queryPerson) throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Business business = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
business = new Business(emc);
}
Wo wo = new Wo();
wo.setValue(false);
result.setData(wo);
......@@ -26,115 +27,10 @@ public class ActionQueryPermissionReadDocument extends BaseAction {
if(document == null){
return result;
}
//匿名用户是否可读
if(effectivePerson.isAnonymous()){
AppInfo appInfo = appInfoServiceAdv.get( document.getAppId() );
CategoryInfo categoryInfo = categoryInfoServiceAdv.get(document.getCategoryId());
if(appInfo!=null && categoryInfo!=null){
boolean flag = true;
//检查这个文档所在的栏目和分类是否都是全员可见
if( ( ListTools.isNotEmpty( document.getReadPersonList() ) && !document.getReadPersonList().contains( "所有人" ) )
|| ListTools.isNotEmpty( document.getReadUnitList() ) || ListTools.isNotEmpty( document.getReadGroupList() ) ) {
flag = false;
}
//检查这个文档所在的栏目和分类是否都是全员可见
if( !appInfo.getAllPeopleView() ) {
//栏目不可见
flag = false;
}
//检查这个文档所在的栏目和分类是否都是全员可见
if( !categoryInfo.getAllPeopleView() ) {
//分类不可见
flag = false;
}
wo.setValue(flag);
return result;
}
}else{
String personName = effectivePerson.getDistinguishedName();
if(effectivePerson.isManager()){
if(StringUtils.isNotEmpty(queryPerson)){
Person person = userManagerService.getPerson(queryPerson);
if(person!=null){
personName = person.getDistinguishedName();
}else{
return result;
}
}else{
wo.setValue(true);
return result;
}
}
List<String> unitNames = userManagerService.listUnitNamesWithPerson(personName);
List<String> groupNames = userManagerService.listGroupNamesByPerson(personName);
//是否是读者
if(ListTools.contains(document.getReadPersonList(), getShortTargetFlag(personName)) ||
ListTools.contains(document.getReadPersonList(), "所有人")){
wo.setValue(true);
return result;
}
for(String unitName : unitNames){
if(ListTools.contains(document.getReadUnitList(), getShortTargetFlag(unitName))){
wo.setValue(true);
return result;
}
}
for(String groupName : groupNames){
if(ListTools.contains(document.getReadGroupList(), getShortTargetFlag(groupName))){
wo.setValue(true);
return result;
}
}
//是否是作者
if( ListTools.isNotEmpty( document.getAuthorPersonList() )) {
if( document.getAuthorPersonList().contains( personName ) ) {
wo.setValue(true);
return result;
}
}
if( ListTools.isNotEmpty( document.getAuthorUnitList() )) {
if( ListTools.containsAny( unitNames, document.getAuthorUnitList())) {
wo.setValue(true);
return result;
}
}
if( ListTools.isNotEmpty( document.getAuthorGroupList() )) {
if( ListTools.containsAny( groupNames, document.getAuthorGroupList())) {
wo.setValue(true);
return result;
}
}
//是否是分类的管理者
CategoryInfo categoryInfo = categoryInfoServiceAdv.get(document.getCategoryId());
if ( categoryInfoServiceAdv.isCategoryInfoManager( categoryInfo, personName, unitNames, groupNames )) {
wo.setValue(true);
return result;
}
//是否是栏目的管理者
AppInfo appInfo = appInfoServiceAdv.get( document.getAppId() );
if (appInfoServiceAdv.isAppInfoManager( appInfo, personName, unitNames, groupNames )) {
wo.setValue(true);
return result;
}
}
return result;
}
wo.setValue(this.hasReadPermission(business, document, null, null, effectivePerson, queryPerson));
private String getShortTargetFlag(String distinguishedName) {
String target = null;
if( StringUtils.isNotEmpty( distinguishedName ) ){
String[] array = distinguishedName.split("@");
StringBuffer sb = new StringBuffer();
if( array.length == 3 ){
target = sb.append(array[1]).append("@").append(array[2]).toString();
}else if( array.length == 2 ){
//2段
target = sb.append(array[0]).append("@").append(array[1]).toString();
}else{
target = array[0];
}
}
return target;
return result;
}
public static class Wo extends WrapBoolean {
......
......@@ -6,9 +6,12 @@ import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.cache.Cache;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
import com.x.base.core.project.organization.Person;
import com.x.base.core.project.tools.ListTools;
import com.x.cms.assemble.control.Business;
import com.x.cms.assemble.control.ThisApplication;
import com.x.cms.assemble.control.service.AppInfoServiceAdv;
import com.x.cms.assemble.control.service.CategoryInfoServiceAdv;
import com.x.cms.assemble.control.service.DocCommendPersistService;
......@@ -23,6 +26,7 @@ import com.x.cms.assemble.control.service.QueryViewService;
import com.x.cms.assemble.control.service.UserManagerService;
import com.x.cms.core.entity.*;
import com.x.query.core.entity.Item;
import org.apache.commons.lang3.StringUtils;
public class BaseAction extends StandardJaxrsAction {
......@@ -208,6 +212,82 @@ public class BaseAction extends StandardJaxrsAction {
return false;
}
protected boolean hasReadPermission(Business business, Document document, List<String> unitNames, List<String> groupNames, EffectivePerson effectivePerson, String queryPerson) throws Exception{
String personName = effectivePerson.getDistinguishedName();
if(effectivePerson.isManager()){
if(StringUtils.isNotEmpty(queryPerson)){
Person person = userManagerService.getPerson(queryPerson);
if(person!=null){
personName = person.getDistinguishedName();
}else{
return false;
}
}else {
return true;
}
}
//是否是读者
if(ListTools.contains(document.getReadPersonList(), getShortTargetFlag(personName)) ||
ListTools.contains(document.getReadPersonList(), "所有人")){
return true;
}
if(unitNames == null){
unitNames = userManagerService.listUnitNamesWithPerson(personName);
}
for(String unitName : unitNames){
if(ListTools.contains(document.getReadUnitList(), getShortTargetFlag(unitName))){
return true;
}
}
if (groupNames == null){
groupNames = userManagerService.listGroupNamesByPerson(personName);
}
for(String groupName : groupNames){
if(ListTools.contains(document.getReadGroupList(), getShortTargetFlag(groupName))){
return true;
}
}
//是否是作者
if( ListTools.isNotEmpty( document.getAuthorPersonList() )) {
if( document.getAuthorPersonList().contains( personName ) ) {
return true;
}
}
if( ListTools.isNotEmpty( document.getAuthorUnitList() )) {
if( ListTools.containsAny( unitNames, document.getAuthorUnitList())) {
return true;
}
}
if( ListTools.isNotEmpty( document.getAuthorGroupList() )) {
if( ListTools.containsAny( groupNames, document.getAuthorGroupList())) {
return true;
}
}
if(business.isHasPlatformRole(personName, ThisApplication.ROLE_CMSManager)){
return true;
}
return false;
}
protected String getShortTargetFlag(String distinguishedName) {
String target = null;
if( StringUtils.isNotEmpty( distinguishedName ) ){
String[] array = distinguishedName.split("@");
StringBuffer sb = new StringBuffer();
if( array.length == 3 ){
target = sb.append(array[1]).append("@").append(array[2]).toString();
}else if( array.length == 2 ){
//2段
target = sb.append(array[0]).append("@").append(array[1]).toString();
}else{
target = array[0];
}
}
return target;
}
// /**
......
......@@ -676,4 +676,23 @@ public class DocumentAction extends StandardJaxrsAction{
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "列示文档数据.", action = ActionQueryListDocumentData.class)
@POST
@Path("list/document/data")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void query_listDocumentData( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, JsonElement jsonElement ) {
EffectivePerson effectivePerson = this.effectivePerson( request );
ActionResult<List<ActionQueryListDocumentData.Wo>> result = new ActionResult<>();
try {
result = ((ActionQueryListDocumentData)proxy.getProxy(ActionQueryListDocumentData.class)).execute( request, effectivePerson, jsonElement );
} catch (Exception e) {
result.error( e );
logger.error( e, effectivePerson, request, jsonElement);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册