Access group implement and setup #1216

Hi,

I asked one question before: https://www.cuba-platform.com/discuss/t/access-group-implement-and-setup

But I met another problem,
I have tried {E}.group.id = :session$userGroupId to filter some orders out, and it works well to me. The orders in order window are filtered.
But I have the orders list in customer edit window, in this list, I still see all the orders there, can I do the same thing to this orders list? how?

Best Regards. Zhengwu.

Hi Zhengwu,

If the orders are loaded as a collection property of the Customer entity (i.e. in a nested datasource without a separate query), then you should make your constraint to work also in memory by specifying Check in database and in memory in the constraint editor. After that, add a Groovy script like this:


{E}.group.id == com.haulmont.cuba.core.global.AppBeans
    .get(com.haulmont.cuba.core.global.UserSessionSource.class)
        .getUserSession().currentOrSubstitutedUser.group.id;

In version 6.4, we have added userSession variable to constraint scripts, so the condition will be much simpler:


{E}.group.id == userSession.currentOrSubstitutedUser.group.id

it works great, thanks a lot :slight_smile:

Hi Konstantin,

It is functionally working great, but I found in tomcat log, there is an error.
can you help to check please. I am using version 6.3


21:36:32.366 ERROR c.h.cuba.core.sys.SecurityImpl - An error occurred while applying constraint's groovy script. The entity has been filtered.Entity class [jy$Order]. Entity [a798afa3-6e60-67f0-b7ed-9f04ccaa2067].
java.lang.NullPointerException: Cannot get property 'id' on null object
        at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:60) ~[groovy-all-2.4.4.jar:2.4.4]
        at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:172) ~[groovy-all-2.4.4.jar:2.4.4]
        at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:47) ~[groovy-all-2.4.4.jar:2.4.4]
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:296) ~[groovy-all-2.4.4.jar:2.4.4]
        at Script1.run(Script1.groovy:2) ~[na:na]
        at com.haulmont.cuba.core.sys.AbstractScripting.evaluateGroovy(AbstractScripting.java:194) ~[cuba-global-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.AbstractScripting.evaluateGroovy(AbstractScripting.java:220) ~[cuba-global-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.SecurityImpl.isPermitted(SecurityImpl.java:216) [cuba-global-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.SecurityImpl.isPermitted(SecurityImpl.java:201) [cuba-global-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.isPermittedInMemory(PersistenceSecurityImpl.java:290) [cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.internalApplyConstraints(PersistenceSecurityImpl.java:251) [cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.internalApplyConstraints(PersistenceSecurityImpl.java:237) [cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.internalApplyConstraints(PersistenceSecurityImpl.java:265) [cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.internalApplyConstraints(PersistenceSecurityImpl.java:271) [cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.lambda$applyConstraints$33(PersistenceSecurityImpl.java:141) [cuba-core-6.3.2.jar:6.3.2]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_102]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_102]
        at java.util.Vector$VectorSpliterator.forEachRemaining(Vector.java:1414) ~[na:1.8.0_102]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_102]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_102]
        at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_102]
        at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_102]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_102]
        at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_102]
        at com.haulmont.cuba.core.sys.PersistenceSecurityImpl.applyConstraints(PersistenceSecurityImpl.java:140) [cuba-core-6.3.2.jar:6.3.2]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_102]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at com.haulmont.cuba.core.sys.PerformanceLogInterceptor.aroundInvoke(PerformanceLogInterceptor.java:29) ~[cuba-core-6.3.2.jar:6.3.2]
        at sun.reflect.GeneratedMethodAccessor77.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at com.sun.proxy.$Proxy153.applyConstraints(Unknown Source) ~[na:na]
        at com.haulmont.cuba.core.app.RdbmsStore.loadList(RdbmsStore.java:206) ~[cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.core.app.DataManagerBean.loadList(DataManagerBean.java:76) ~[cuba-core-6.3.2.jar:6.3.2]
        at sun.reflect.GeneratedMethodAccessor154.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at com.haulmont.cuba.core.app.DataManagerBean$SecureDataManagerInvocationHandler.invoke(DataManagerBean.java:251) ~[cuba-core-6.3.2.jar:6.3.2]
        at com.sun.proxy.$Proxy278.loadList(Unknown Source) ~[na:na]
        at com.haulmont.cuba.core.app.DataServiceBean.loadList(DataServiceBean.java:49) ~[cuba-core-6.3.2.jar:6.3.2]
        at sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:84) ~[cuba-core-6.3.2.jar:6.3.2]
        at sun.reflect.GeneratedMethodAccessor92.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.1.RELEASE.jar:4.3.1.RELEASE]
        at com.sun.proxy.$Proxy181.loadList(Unknown Source) ~[na:na]
        at sun.reflect.GeneratedMethodAccessor152.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
        at com.haulmont.cuba.core.sys.remoting.LocalServiceInvokerImpl.invoke(LocalServiceInvokerImpl.java:95) ~[cuba-core-6.3.2.jar:6.3.2]
        at com.haulmont.cuba.web.sys.remoting.LocalServiceProxy$LocalServiceInvocationHandler.invoke(LocalServiceProxy.java:146) ~[na:na]
        at com.sun.proxy.$Proxy23.loadList(Unknown Source) ~[na:na]
        at com.haulmont.cuba.client.sys.DataManagerClientImpl.loadList(DataManagerClientImpl.java:52) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.GenericDataSupplier.loadList(GenericDataSupplier.java:100) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.CollectionDatasourceImpl.loadData(CollectionDatasourceImpl.java:538) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.CollectionDatasourceImpl.refresh(CollectionDatasourceImpl.java:148) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.CollectionDatasourceImpl.refresh(CollectionDatasourceImpl.java:106) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.CollectionDatasourceImpl.setSuspended(CollectionDatasourceImpl.java:647) ~[na:na]
        at com.haulmont.cuba.gui.data.impl.DsContextImpl.resumeSuspended(DsContextImpl.java:83) ~[na:na]
        at com.haulmont.cuba.gui.WindowManager.afterShowWindow(WindowManager.java:966) ~[na:na]
        at com.haulmont.cuba.web.WebWindowManager.showWindow(WebWindowManager.java:397) ~[na:na]
        at com.haulmont.cuba.gui.WindowManager.openWindow(WindowManager.java:595) ~[na:na]
        at com.haulmont.cuba.web.WebWindowManager.openWindow(WebWindowManager.java:137) ~[na:na]
        at com.haulmont.cuba.gui.config.MenuCommand.execute(MenuCommand.java:100) ~[na:na]
        at com.haulmont.cuba.web.sys.MenuBuilder$1.menuSelected(MenuBuilder.java:173) ~[na:na]
        at com.vaadin.ui.MenuBar.changeVariables(MenuBar.java:207) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.communication.ServerRpcHandler.changeVariables(ServerRpcHandler.java:609) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:428) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.lambda$synchronizedHandleRequest$109(CubaVaadinServletService.java:314) ~[na:na]
        at com.haulmont.cuba.web.sys.CubaVaadinServletService.withUserSession(CubaVaadinServletService.java:196) ~[na:na]
        at com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaUidlRequestHandler.synchronizedHandleRequest(CubaVaadinServletService.java:314) ~[na:na]
        at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:369) ~[vaadin-server-7.6.8.cuba.11.jar:7.6.8.cuba.11]
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:278) ~[na:na]
        at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:187) ~[na:na]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[servlet-api.jar:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[catalina.jar:8.0.35]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-websocket.jar:8.0.35]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[catalina.jar:8.0.35]
        at com.haulmont.cuba.web.sys.CubaHttpFilter.handleNotFiltered(CubaHttpFilter.java:108) ~[na:na]
        at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:95) ~[na:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) ~[catalina.jar:8.0.35]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) ~[catalina.jar:8.0.35]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) ~[catalina.jar:8.0.35]
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) ~[catalina.jar:8.0.35]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) ~[catalina.jar:8.0.35]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) ~[catalina.jar:8.0.35]
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) ~[tomcat-coyote.jar:8.0.35]
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) ~[tomcat-coyote.jar:8.0.35]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) ~[tomcat-coyote.jar:8.0.35]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) ~[tomcat-coyote.jar:8.0.35]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_102]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_102]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:8.0.35]
        at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_102]

I figured it out, some order entities missing group. the group field is null.