diff --git a/pom.xml b/pom.xml
index 5c3639938..f1554d7c0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,7 +127,7 @@
com.github.devezhao
persist4j
- 1.3.5
+ 1.4.0
junit
diff --git a/src/main/java/com/rebuild/server/Application.java b/src/main/java/com/rebuild/server/Application.java
index 1473d183e..a682f42d1 100644
--- a/src/main/java/com/rebuild/server/Application.java
+++ b/src/main/java/com/rebuild/server/Application.java
@@ -152,8 +152,6 @@ public final class Application {
ApiGateway.registerApi((Class extends BaseApi>) c);
}
- if (devMode()) MetadataHelper.setPlainEntity(MetadataHelper.getEntity("Attachment"));
-
LOG.info("Rebuild Boot successful in " + (System.currentTimeMillis() - startAt) + " ms");
} catch (Exception ex) {
diff --git a/src/main/java/com/rebuild/server/metadata/MetadataHelper.java b/src/main/java/com/rebuild/server/metadata/MetadataHelper.java
index 80b47102e..1234ee9c9 100644
--- a/src/main/java/com/rebuild/server/metadata/MetadataHelper.java
+++ b/src/main/java/com/rebuild/server/metadata/MetadataHelper.java
@@ -13,7 +13,6 @@ import cn.devezhao.persist4j.dialect.FieldType;
import cn.devezhao.persist4j.engine.ID;
import cn.devezhao.persist4j.metadata.MetadataException;
import com.rebuild.server.Application;
-import com.rebuild.server.RebuildException;
import com.rebuild.server.metadata.entity.EasyMeta;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
@@ -21,9 +20,7 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.util.Assert;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
/**
* 实体元数据
@@ -387,31 +384,4 @@ public class MetadataHelper {
}
return checkAndWarnField(getEntity(entityName), fieldName);
}
-
- private static final Set PLAIN_ENTITIES = new HashSet<>();
- /**
- * 指定实体具有和业务实体一样的特性(除权限以外(指定实体无权限字段))。
- *
- * @param entityCode
- * @return
- */
- public static boolean isPlainEntity(int entityCode) {
- return PLAIN_ENTITIES.contains(entityCode);
- }
-
- /**
- * WARN: 除非你清楚的知道此方法的意义,否则不要使用
- *
- * @param entity
- * @see #isPlainEntity(int)
- */
- public static void setPlainEntity(Entity entity) {
- if (entity.containsField(EntityHelper.CreatedOn) && entity.containsField(EntityHelper.CreatedBy)
- && entity.containsField(EntityHelper.ModifiedOn) && entity.containsField(EntityHelper.ModifiedBy)) {
- LOG.info("Set to plain entity : " + entity.getEntityCode());
- PLAIN_ENTITIES.add(entity.getEntityCode());
- } else {
- throw new RebuildException("Cannot be set as a PlainEntity : " + entity);
- }
- }
}
diff --git a/src/main/java/com/rebuild/server/metadata/MetadataSorter.java b/src/main/java/com/rebuild/server/metadata/MetadataSorter.java
index 77ea74d05..21782dba6 100644
--- a/src/main/java/com/rebuild/server/metadata/MetadataSorter.java
+++ b/src/main/java/com/rebuild/server/metadata/MetadataSorter.java
@@ -69,9 +69,8 @@ public class MetadataSorter {
Entity[] entities = MetadataHelper.getEntities();
sortBaseMeta(entities);
for (Entity e : entities) {
- if (EasyMeta.valueOf(e).isBuiltin()
- && !MetadataHelper.hasPrivilegesField(e)
- && !MetadataHelper.isPlainEntity(e.getEntityCode())) {
+ EasyMeta easyEntity = EasyMeta.valueOf(e);
+ if (easyEntity.isBuiltin() && !MetadataHelper.hasPrivilegesField(e) && !easyEntity.isPlainEntity()) {
continue;
}
diff --git a/src/main/java/com/rebuild/server/metadata/entity/EasyMeta.java b/src/main/java/com/rebuild/server/metadata/entity/EasyMeta.java
index d094eae9c..171a155c4 100644
--- a/src/main/java/com/rebuild/server/metadata/entity/EasyMeta.java
+++ b/src/main/java/com/rebuild/server/metadata/entity/EasyMeta.java
@@ -37,7 +37,7 @@ import org.springframework.util.Assert;
import java.util.Set;
/**
- * 元数据元素封装
+ * 元数据(Entity/Field)封装
*
* @author zhaofang123@gmail.com
* @since 08/13/2018
@@ -45,12 +45,15 @@ import java.util.Set;
public class EasyMeta implements BaseMeta {
private static final long serialVersionUID = -6463919098111506968L;
- private BaseMeta baseMeta;
+ final private BaseMeta baseMeta;
public EasyMeta(BaseMeta baseMeta) {
this.baseMeta = baseMeta;
}
-
+
+ /**
+ * @return Returns Entity or Field
+ */
public BaseMeta getBaseMeta() {
return baseMeta;
}
@@ -68,7 +71,7 @@ public class EasyMeta implements BaseMeta {
/**
* Use {@link #getLabel()}
*/
- @SuppressWarnings("DeprecatedIsStillUsed")
+ @SuppressWarnings("DeprecatedIsStillUsed")
@Deprecated
@Override
public String getDescription() {
@@ -76,7 +79,7 @@ public class EasyMeta implements BaseMeta {
}
@Override
- public String getExtraAttrs() {
+ public JSONObject getExtraAttrs() {
return baseMeta.getExtraAttrs();
}
@@ -115,7 +118,7 @@ public class EasyMeta implements BaseMeta {
}
DisplayType dt;
- String dtInExtra = getExtraAttrsJson().getString("displayType");
+ String dtInExtra = getExtraAttrs().getString("displayType");
if (dtInExtra != null) {
dt = DisplayType.valueOf(dtInExtra);
} else {
@@ -125,7 +128,7 @@ public class EasyMeta implements BaseMeta {
if (dt != null) {
return dt;
}
- throw new RebuildException("Unsupported field type : " + this.baseMeta);
+ throw new RebuildException("Unsupported field type : " + baseMeta);
}
/**
@@ -140,7 +143,7 @@ public class EasyMeta implements BaseMeta {
}
if (isField()) {
- Field field = (Field) this.baseMeta;
+ Field field = (Field) baseMeta;
if (MetadataHelper.isCommonsField(field)) {
return true;
} else if (getDisplayType() == DisplayType.REFERENCE) {
@@ -173,7 +176,7 @@ public class EasyMeta implements BaseMeta {
if (ext != null) {
return (String) ext[1];
}
- return StringUtils.defaultIfBlank(getExtraAttrsJson().getString("comments"), "系统内建");
+ return StringUtils.defaultIfBlank(getExtraAttrs().getString("comments"), "系统内建");
}
/**
@@ -191,7 +194,7 @@ public class EasyMeta implements BaseMeta {
if (StringUtils.isNotBlank(customIcon)) {
return customIcon;
}
- return StringUtils.defaultIfBlank(getExtraAttrsJson().getString("icon"), "texture");
+ return StringUtils.defaultIfBlank(getExtraAttrs().getString("icon"), "texture");
}
/**
@@ -204,7 +207,7 @@ public class EasyMeta implements BaseMeta {
Assert.isTrue(isField(), "Field supports only");
Object[] ext = getMetaExt();
if (ext == null || StringUtils.isBlank((String) ext[3])) {
- JSONObject extConfig = getExtraAttrsJson().getJSONObject("extConfig");
+ JSONObject extConfig = getExtraAttrs().getJSONObject("extConfig");
return extConfig == null ? JSONUtils.EMPTY_OBJECT : extConfig;
}
return JSON.parseObject((String) ext[3]);
@@ -241,6 +244,14 @@ public class EasyMeta implements BaseMeta {
return !set.contains(field.getName());
}
+ /**
+ * 指定实体具有和业务实体一样的特性(除权限以外(指定实体无权限字段))。
+ * @return
+ */
+ public boolean isPlainEntity() {
+ return !isField() && getExtraAttrs().getBooleanValue("plainEntity");
+ }
+
/**
* @return
*/
@@ -261,14 +272,6 @@ public class EasyMeta implements BaseMeta {
return ext;
}
- /**
- * @return
- */
- private JSONObject getExtraAttrsJson() {
- return StringUtils.isBlank(getExtraAttrs())
- ? JSONUtils.EMPTY_OBJECT : JSON.parseObject(getExtraAttrs());
- }
-
/**
* 将字段类型转成 DisplayType
*
@@ -309,7 +312,7 @@ public class EasyMeta implements BaseMeta {
@Override
public String toString() {
- return "EASY#" + this.baseMeta.toString();
+ return "EASY#" + baseMeta.toString();
}
// --
diff --git a/src/main/java/com/rebuild/server/service/bizz/privileges/EntityQueryFilter.java b/src/main/java/com/rebuild/server/service/bizz/privileges/EntityQueryFilter.java
index 9ecd02d66..ddec65216 100644
--- a/src/main/java/com/rebuild/server/service/bizz/privileges/EntityQueryFilter.java
+++ b/src/main/java/com/rebuild/server/service/bizz/privileges/EntityQueryFilter.java
@@ -19,6 +19,7 @@ import cn.devezhao.persist4j.Field;
import cn.devezhao.persist4j.Filter;
import com.rebuild.server.metadata.EntityHelper;
import com.rebuild.server.metadata.MetadataHelper;
+import com.rebuild.server.metadata.entity.EasyMeta;
import org.apache.commons.lang.StringUtils;
import java.util.HashSet;
@@ -88,8 +89,7 @@ public class EntityQueryFilter implements Filter, QueryFilter {
Entity useMaster = null;
if (!EntityHelper.hasPrivilegesField(entity)) {
// NOTE BIZZ 实体全部用户可见
- if (MetadataHelper.isBizzEntity(entity.getEntityCode())
- || MetadataHelper.isPlainEntity(entity.getEntityCode())) {
+ if (MetadataHelper.isBizzEntity(entity.getEntityCode()) || EasyMeta.valueOf(entity).isPlainEntity()) {
return ALLOWED.evaluate(null);
} else if (entity.getMasterEntity() != null) {
useMaster = entity.getMasterEntity();
diff --git a/src/main/java/com/rebuild/server/service/bizz/privileges/SecurityManager.java b/src/main/java/com/rebuild/server/service/bizz/privileges/SecurityManager.java
index f5f0a5089..b30b959b7 100644
--- a/src/main/java/com/rebuild/server/service/bizz/privileges/SecurityManager.java
+++ b/src/main/java/com/rebuild/server/service/bizz/privileges/SecurityManager.java
@@ -22,6 +22,7 @@ import com.rebuild.server.Application;
import com.rebuild.server.helper.cache.NoRecordFoundException;
import com.rebuild.server.helper.cache.RecordOwningCache;
import com.rebuild.server.metadata.MetadataHelper;
+import com.rebuild.server.metadata.entity.EasyMeta;
import com.rebuild.server.service.EntityService;
import com.rebuild.server.service.bizz.RoleService;
import com.rebuild.server.service.bizz.UserService;
@@ -207,7 +208,7 @@ public class SecurityManager {
*/
public boolean allow(ID user, int entity, Permission action) {
// CRUD and PlainEntity
- if (action.getMask() <= BizzPermission.READ.getMask() && MetadataHelper.isPlainEntity(entity)) {
+ if (action.getMask() <= BizzPermission.READ.getMask() && EasyMeta.valueOf(entity).isPlainEntity()) {
return true;
}
@@ -255,7 +256,7 @@ public class SecurityManager {
*/
public boolean allow(ID user, ID target, Permission action) {
// CRUD and PlainEntity
- if (action.getMask() <= BizzPermission.READ.getMask() && MetadataHelper.isPlainEntity(target.getEntityCode())) {
+ if (action.getMask() <= BizzPermission.READ.getMask() && EasyMeta.valueOf(target.getEntityCode()).isPlainEntity()) {
return true;
}
diff --git a/src/main/java/com/rebuild/web/BaseEntityControll.java b/src/main/java/com/rebuild/web/BaseEntityControll.java
index 133af1433..e2ceae643 100644
--- a/src/main/java/com/rebuild/web/BaseEntityControll.java
+++ b/src/main/java/com/rebuild/web/BaseEntityControll.java
@@ -59,7 +59,7 @@ public abstract class BaseEntityControll extends BasePageControll {
actionMap.put(act.getName(), priv.allowed(act));
}
mv.getModel().put("entityPrivileges", JSON.toJSONString(actionMap));
- } else if (MetadataHelper.isPlainEntity(entityMeta.getEntityCode())) {
+ } else if (EasyMeta.valueOf(entityMeta).isPlainEntity()) {
mv.getModel().put("entityPrivileges", PLAIN_ENTITY_PRIVILEGES);
} else {
mv.getModel().put("entityPrivileges", JSONUtils.EMPTY_OBJECT_STR);
@@ -96,7 +96,7 @@ public abstract class BaseEntityControll extends BasePageControll {
actionMap.put(act.getName(), Application.getSecurityManager().allow(user, record, act));
}
mv.getModel().put("entityPrivileges", JSON.toJSONString(actionMap));
- } else if (MetadataHelper.isPlainEntity(entity.getEntityCode())) {
+ } else if (EasyMeta.valueOf(entity).isPlainEntity()) {
mv.getModel().put("entityPrivileges", PLAIN_ENTITY_PRIVILEGES);
} else {
mv.getModel().put("entityPrivileges", JSONUtils.EMPTY_OBJECT_STR);
diff --git a/src/main/java/com/rebuild/web/base/general/GeneralDataListControll.java b/src/main/java/com/rebuild/web/base/general/GeneralDataListControll.java
index 1e91dd170..869fdf75a 100644
--- a/src/main/java/com/rebuild/web/base/general/GeneralDataListControll.java
+++ b/src/main/java/com/rebuild/web/base/general/GeneralDataListControll.java
@@ -29,6 +29,7 @@ import com.rebuild.server.helper.datalist.DataListControl;
import com.rebuild.server.helper.datalist.DefaultDataListControl;
import com.rebuild.server.metadata.EntityHelper;
import com.rebuild.server.metadata.MetadataHelper;
+import com.rebuild.server.metadata.entity.EasyMeta;
import com.rebuild.server.service.bizz.privileges.ZeroEntry;
import com.rebuild.web.BaseEntityControll;
import org.springframework.http.HttpStatus;
@@ -118,7 +119,7 @@ public class GeneralDataListControll extends BaseEntityControll {
url = "../feeds/home#s=" + id;
} else if (entity.getEntityCode() == EntityHelper.User) {
url = MessageFormat.format("../admin/bizuser/users#!/View/{0}/{1}", entity.getName(), id);
- } else if (MetadataHelper.hasPrivilegesField(entity) || MetadataHelper.isPlainEntity(id.getEntityCode())) {
+ } else if (MetadataHelper.hasPrivilegesField(entity) || EasyMeta.valueOf(id.getEntityCode()).isPlainEntity()) {
url = MessageFormat.format("{0}/list#!/View/{0}/{1}", entity.getName(), id);
}
}