mirror of
https://gitee.com/jmix/cuba.git
synced 2024-12-05 04:38:10 +08:00
Refs #1433 @SystemLevel for Attributes
This commit is contained in:
parent
efd52f8270
commit
d2bce94dbe
@ -2,10 +2,6 @@
|
|||||||
* Copyright (c) 2008 Haulmont Technology Ltd. All Rights Reserved.
|
* Copyright (c) 2008 Haulmont Technology Ltd. All Rights Reserved.
|
||||||
* Haulmont Technology proprietary and confidential.
|
* Haulmont Technology proprietary and confidential.
|
||||||
* Use is subject to license terms.
|
* Use is subject to license terms.
|
||||||
|
|
||||||
* Author: FIRSTNAME LASTNAME
|
|
||||||
* Created: 06.11.2008 9:49:55
|
|
||||||
* $Id: JPAAnnotationsLoader.java 5981 2011-09-20 07:35:58Z krivopustov $
|
|
||||||
*/
|
*/
|
||||||
package com.haulmont.chile.jpa.loader;
|
package com.haulmont.chile.jpa.loader;
|
||||||
|
|
||||||
@ -17,6 +13,7 @@ import com.haulmont.chile.core.model.Range;
|
|||||||
import com.haulmont.chile.core.model.Session;
|
import com.haulmont.chile.core.model.Session;
|
||||||
import com.haulmont.chile.core.model.MetaProperty;
|
import com.haulmont.chile.core.model.MetaProperty;
|
||||||
import com.haulmont.chile.core.model.impl.MetaClassImpl;
|
import com.haulmont.chile.core.model.impl.MetaClassImpl;
|
||||||
|
import com.haulmont.cuba.core.entity.annotation.SystemLevel;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
import static org.apache.commons.lang.StringUtils.isBlank;
|
import static org.apache.commons.lang.StringUtils.isBlank;
|
||||||
@ -35,6 +32,10 @@ import java.lang.reflect.Field;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author krivopustov
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
public class JPAAnnotationsLoader extends ChileAnnotationsLoader implements ClassMetadataLoader {
|
public class JPAAnnotationsLoader extends ChileAnnotationsLoader implements ClassMetadataLoader {
|
||||||
|
|
||||||
private Log log = LogFactory.getLog(JPAMetadataLoader.class);
|
private Log log = LogFactory.getLog(JPAMetadataLoader.class);
|
||||||
@ -236,6 +237,11 @@ public class JPAAnnotationsLoader extends ChileAnnotationsLoader implements Clas
|
|||||||
if (temporal != null) {
|
if (temporal != null) {
|
||||||
metaProperty.getAnnotations().put("temporal", temporal.value());
|
metaProperty.getAnnotations().put("temporal", temporal.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemLevel systemLevel = field.getAnnotation(SystemLevel.class);
|
||||||
|
if (systemLevel != null) {
|
||||||
|
metaProperty.getAnnotations().put("system", true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isPersistent(Field field) {
|
protected boolean isPersistent(Field field) {
|
||||||
@ -246,4 +252,4 @@ public class JPAAnnotationsLoader extends ChileAnnotationsLoader implements Clas
|
|||||||
|| field.isAnnotationPresent(ManyToMany.class)
|
|| field.isAnnotationPresent(ManyToMany.class)
|
||||||
|| field.isAnnotationPresent(Embedded.class);
|
|| field.isAnnotationPresent(Embedded.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,14 +12,15 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that annotated entity is low-level and should not be available for end-user in various entity lists.
|
* Indicates that annotated entity/field is low-level and should not be available for end-user in various entity/field lists.<br/>
|
||||||
|
* For field indicates that attribute should not be available for dynamic filters in UI.
|
||||||
*
|
*
|
||||||
* @author krivopustov
|
* @author krivopustov
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
@Target({ElementType.TYPE})
|
@Target({ElementType.TYPE, ElementType.FIELD})
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface SystemLevel {
|
public @interface SystemLevel {
|
||||||
|
|
||||||
boolean value() default true;
|
boolean value() default true;
|
||||||
}
|
}
|
@ -15,6 +15,7 @@ import com.haulmont.chile.core.annotations.NamePattern;
|
|||||||
import com.haulmont.cuba.core.entity.StandardEntity;
|
import com.haulmont.cuba.core.entity.StandardEntity;
|
||||||
import com.haulmont.cuba.core.entity.annotation.Listeners;
|
import com.haulmont.cuba.core.entity.annotation.Listeners;
|
||||||
import com.haulmont.cuba.core.entity.annotation.OnDeleteInverse;
|
import com.haulmont.cuba.core.entity.annotation.OnDeleteInverse;
|
||||||
|
import com.haulmont.cuba.core.entity.annotation.SystemLevel;
|
||||||
import com.haulmont.cuba.core.entity.annotation.TrackEditScreenHistory;
|
import com.haulmont.cuba.core.entity.annotation.TrackEditScreenHistory;
|
||||||
import com.haulmont.cuba.core.global.DeletePolicy;
|
import com.haulmont.cuba.core.global.DeletePolicy;
|
||||||
import com.haulmont.cuba.core.sys.AppContext;
|
import com.haulmont.cuba.core.sys.AppContext;
|
||||||
@ -42,9 +43,11 @@ public class User extends StandardEntity {
|
|||||||
@Column(name = "LOGIN", length = LOGIN_FIELD_LEN, nullable = false)
|
@Column(name = "LOGIN", length = LOGIN_FIELD_LEN, nullable = false)
|
||||||
protected String login;
|
protected String login;
|
||||||
|
|
||||||
|
@SystemLevel
|
||||||
@Column(name = "LOGIN_LC", length = LOGIN_FIELD_LEN, nullable = false)
|
@Column(name = "LOGIN_LC", length = LOGIN_FIELD_LEN, nullable = false)
|
||||||
protected String loginLowerCase;
|
protected String loginLowerCase;
|
||||||
|
|
||||||
|
@SystemLevel
|
||||||
@Column(name = "PASSWORD", length = 255)
|
@Column(name = "PASSWORD", length = 255)
|
||||||
protected String password;
|
protected String password;
|
||||||
|
|
||||||
@ -254,4 +257,4 @@ public class User extends StandardEntity {
|
|||||||
public String getSalt() {
|
public String getSalt() {
|
||||||
return id != null ? id.toString() : "";
|
return id != null ? id.toString() : "";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,41 +0,0 @@
|
|||||||
<!--
|
|
||||||
~ Copyright (c) 2011 Haulmont Technology Ltd. All Rights Reserved.
|
|
||||||
~ Haulmont Technology proprietary and confidential.
|
|
||||||
~ Use is subject to license terms.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<window xmlns="http://schemas.haulmont.com/cuba/4.0/window.xsd">
|
|
||||||
<dsContext>
|
|
||||||
<collectionDatasource
|
|
||||||
id="groups"
|
|
||||||
class="com.haulmont.cuba.security.entity.Group"
|
|
||||||
view="group.lookup"
|
|
||||||
>
|
|
||||||
<query>select g from sec$Group g</query>
|
|
||||||
</collectionDatasource>
|
|
||||||
</dsContext>
|
|
||||||
|
|
||||||
<layout>
|
|
||||||
<vbox expand="expand-box" margin="true">
|
|
||||||
<hbox id="group-box" spacing="true" stylename="edit-area">
|
|
||||||
<label control="name" value="msg://name"/>
|
|
||||||
<textField id="name"/>
|
|
||||||
|
|
||||||
<label control="login" value="msg://login"/>
|
|
||||||
<textField id="login"/>
|
|
||||||
|
|
||||||
<label control="email" value="msg://email"/>
|
|
||||||
<textField id="email"/>
|
|
||||||
|
|
||||||
<label control="group" value="msg://group"/>
|
|
||||||
<lookupField id="group" optionsDatasource="groups" captionProperty="name" required="false"
|
|
||||||
nullName="msg://any"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="MIDDLE_LEFT" spacing="true" margin="true;false;false;false">
|
|
||||||
<button id="apply" icon="icons/search.png"/>
|
|
||||||
<button id="clear" icon="icons/clear.png"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox id="expand-box"/>
|
|
||||||
</vbox>
|
|
||||||
</layout>
|
|
||||||
</window>
|
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
<layout expand="usersTable" spacing="true">
|
<layout expand="usersTable" spacing="true">
|
||||||
<filter id="genericFilter" datasource="usersDs" applyTo="usersTable">
|
<filter id="genericFilter" datasource="usersDs" applyTo="usersTable">
|
||||||
<properties include=".*" exclude="(password)|(loginLowerCase)"/>
|
<properties include=".*"/>
|
||||||
<custom name="customByGroup" caption="msg://genericFilter.customByGroup"
|
<custom name="customByGroup" caption="msg://genericFilter.customByGroup"
|
||||||
join="left join u.group.hierarchyList h" paramClass="com.haulmont.cuba.security.entity.Group">
|
join="left join u.group.hierarchyList h" paramClass="com.haulmont.cuba.security.entity.Group">
|
||||||
(h.parent.id = ? or h.group.id = ?) or (u.group.id = ? and h.parent is null)
|
(h.parent.id = ? or h.group.id = ?) or (u.group.id = ? and h.parent is null)
|
||||||
@ -73,4 +73,4 @@
|
|||||||
<rows datasource="usersDs"/>
|
<rows datasource="usersDs"/>
|
||||||
</groupTable>
|
</groupTable>
|
||||||
</layout>
|
</layout>
|
||||||
</window>
|
</window>
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013 Haulmont Technology Ltd. All Rights Reserved.
|
||||||
|
* Haulmont Technology proprietary and confidential.
|
||||||
|
* Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.haulmont.cuba.gui.components.filter.addcondition;
|
||||||
|
|
||||||
|
import com.haulmont.chile.core.model.MetaProperty;
|
||||||
|
import com.haulmont.cuba.core.global.AppBeans;
|
||||||
|
import com.haulmont.cuba.core.global.MessageTools;
|
||||||
|
import com.haulmont.cuba.core.global.UserSessionSource;
|
||||||
|
import com.haulmont.cuba.security.entity.EntityAttrAccess;
|
||||||
|
import com.haulmont.cuba.security.global.UserSession;
|
||||||
|
import org.apache.commons.lang.BooleanUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author artamonov
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
public class ModelPropertiesFilter {
|
||||||
|
|
||||||
|
private UserSession userSession;
|
||||||
|
private final MessageTools messageTools;
|
||||||
|
|
||||||
|
public ModelPropertiesFilter() {
|
||||||
|
userSession = AppBeans.get(UserSessionSource.class).getUserSession();
|
||||||
|
messageTools = AppBeans.get(MessageTools.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPropertyFilterAllowed(MetaProperty property) {
|
||||||
|
if (userSession.isEntityAttrPermitted(property.getDomain(), property.getName(), EntityAttrAccess.VIEW)) {
|
||||||
|
// exclude system level attributes
|
||||||
|
Boolean systemLevel = (Boolean) property.getAnnotations().get("system");
|
||||||
|
if (!BooleanUtils.isTrue(systemLevel)) {
|
||||||
|
// exclude not localized properties (they are usually not for end user) and ToMany
|
||||||
|
if (messageTools.hasPropertyCaption(property) && !property.getRange().getCardinality().isMany()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
@ -9,10 +9,7 @@ package com.haulmont.cuba.gui.components.filter.addcondition;
|
|||||||
import com.haulmont.chile.core.model.MetaProperty;
|
import com.haulmont.chile.core.model.MetaProperty;
|
||||||
import com.haulmont.cuba.core.global.AppBeans;
|
import com.haulmont.cuba.core.global.AppBeans;
|
||||||
import com.haulmont.cuba.core.global.MessageTools;
|
import com.haulmont.cuba.core.global.MessageTools;
|
||||||
import com.haulmont.cuba.core.global.UserSessionProvider;
|
|
||||||
import com.haulmont.cuba.gui.components.filter.AbstractConditionDescriptor;
|
import com.haulmont.cuba.gui.components.filter.AbstractConditionDescriptor;
|
||||||
import com.haulmont.cuba.security.entity.EntityAttrAccess;
|
|
||||||
import com.haulmont.cuba.security.global.UserSession;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -20,11 +17,10 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property node.
|
* Property node
|
||||||
* <p/>
|
|
||||||
* <p>$Id$</p>
|
|
||||||
*
|
*
|
||||||
* @author krivopustov
|
* @author krivopustov
|
||||||
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class PropertyModelItem implements ModelItem {
|
public class PropertyModelItem implements ModelItem {
|
||||||
|
|
||||||
@ -64,16 +60,11 @@ public class PropertyModelItem implements ModelItem {
|
|||||||
if (metaProperty.getRange().isClass()) {
|
if (metaProperty.getRange().isClass()) {
|
||||||
List<ModelItem> list = new ArrayList<>();
|
List<ModelItem> list = new ArrayList<>();
|
||||||
|
|
||||||
UserSession userSession = UserSessionProvider.getUserSession();
|
ModelPropertiesFilter propertiesFilter = new ModelPropertiesFilter();
|
||||||
|
|
||||||
for (MetaProperty property : metaProperty.getRange().asClass().getProperties()) {
|
for (MetaProperty property : metaProperty.getRange().asClass().getProperties()) {
|
||||||
// check permissions
|
if (propertiesFilter.isPropertyFilterAllowed(property))
|
||||||
if (userSession.isEntityAttrPermitted(property.getDomain(), property.getName(), EntityAttrAccess.VIEW)) {
|
list.add(new PropertyModelItem(this, property, null, descriptorBuilder));
|
||||||
// exclude not localized properties (they are usually not for end user) and ToMany
|
|
||||||
if (AppBeans.get(MessageTools.class).hasPropertyCaption(property) && !property.getRange().getCardinality().isMany()) {
|
|
||||||
list.add(new PropertyModelItem(this, property, null, descriptorBuilder));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Collections.sort(list, new ModelItemComparator());
|
Collections.sort(list, new ModelItemComparator());
|
||||||
return list;
|
return list;
|
||||||
|
@ -9,13 +9,11 @@ package com.haulmont.cuba.gui.components.filter.addcondition;
|
|||||||
import com.haulmont.chile.core.model.MetaClass;
|
import com.haulmont.chile.core.model.MetaClass;
|
||||||
import com.haulmont.chile.core.model.MetaProperty;
|
import com.haulmont.chile.core.model.MetaProperty;
|
||||||
import com.haulmont.chile.core.model.MetaPropertyPath;
|
import com.haulmont.chile.core.model.MetaPropertyPath;
|
||||||
import com.haulmont.cuba.core.global.MessageProvider;
|
import com.haulmont.cuba.core.global.AppBeans;
|
||||||
import com.haulmont.cuba.core.global.UserSessionProvider;
|
import com.haulmont.cuba.core.global.Messages;
|
||||||
import com.haulmont.cuba.gui.components.filter.AbstractConditionDescriptor;
|
import com.haulmont.cuba.gui.components.filter.AbstractConditionDescriptor;
|
||||||
import com.haulmont.cuba.gui.components.filter.AbstractFilterEditor;
|
import com.haulmont.cuba.gui.components.filter.AbstractFilterEditor;
|
||||||
import com.haulmont.cuba.gui.components.filter.AbstractPropertyConditionDescriptor;
|
import com.haulmont.cuba.gui.components.filter.AbstractPropertyConditionDescriptor;
|
||||||
import com.haulmont.cuba.security.entity.EntityAttrAccess;
|
|
||||||
import com.haulmont.cuba.security.global.UserSession;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
@ -55,7 +53,7 @@ public class RootPropertyModelItem implements ModelItem {
|
|||||||
public List<ModelItem> getChildren() {
|
public List<ModelItem> getChildren() {
|
||||||
List<ModelItem> list = new ArrayList<>();
|
List<ModelItem> list = new ArrayList<>();
|
||||||
|
|
||||||
UserSession userSession = UserSessionProvider.getUserSession();
|
ModelPropertiesFilter modelPropertiesFilter = new ModelPropertiesFilter();
|
||||||
|
|
||||||
for (AbstractConditionDescriptor descriptor : propertyDescriptors) {
|
for (AbstractConditionDescriptor descriptor : propertyDescriptors) {
|
||||||
if (descriptor instanceof AbstractPropertyConditionDescriptor) {
|
if (descriptor instanceof AbstractPropertyConditionDescriptor) {
|
||||||
@ -65,7 +63,8 @@ public class RootPropertyModelItem implements ModelItem {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
MetaProperty metaProperty = mpp.getMetaProperty();
|
MetaProperty metaProperty = mpp.getMetaProperty();
|
||||||
if (userSession.isEntityAttrPermitted(metaClass, metaProperty.getName(), EntityAttrAccess.VIEW))
|
|
||||||
|
if (modelPropertiesFilter.isPropertyFilterAllowed(metaProperty))
|
||||||
list.add(new PropertyModelItem(null, metaProperty, descriptor, descriptorBuilder));
|
list.add(new PropertyModelItem(null, metaProperty, descriptor, descriptorBuilder));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,11 +75,11 @@ public class RootPropertyModelItem implements ModelItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCaption() {
|
public String getCaption() {
|
||||||
return MessageProvider.getMessage(AbstractFilterEditor.MESSAGES_PACK, "NewConditionDlg.attributes");
|
return AppBeans.get(Messages.class).getMessage(AbstractFilterEditor.MESSAGES_PACK, "NewConditionDlg.attributes");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractConditionDescriptor getDescriptor() {
|
public AbstractConditionDescriptor getDescriptor() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user