refactor: isPlainEntity

This commit is contained in:
devezhao-mbp 2020-04-05 23:22:40 +08:00
parent 7111e054c1
commit e75b11ee08
9 changed files with 35 additions and 63 deletions

View file

@ -127,7 +127,7 @@
<dependency>
<groupId>com.github.devezhao</groupId>
<artifactId>persist4j</artifactId>
<version>1.3.5</version>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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