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