On 22/09/20 09:23, Anmol Sharma wrote: > Hi Francisco, > > I was able to verify that adding these annotations works and helps me > intercept the logic layer for application privilege updates.
Glad to hear this! > On Wed, Sep 9, 2020, 4:29 AM Francesco Chicchiriccò <ilgro...@apache.org > <mailto:ilgro...@apache.org>> wrote: > > Hi Anmol, > thanks for reporting the error message. So ,the simplest solution should > be to define your own class > > core/src/main/java/org/apache/syncope/core/logic/MyOwnCoolHandler.java > > not extending any other class. Ensure to annotate as > > @Aspect > @Component > > Essentially, you are defining an additional Aspect, which should not > interfere with LogicInvocationHandler. > > Please let me know if this approach works. > Regards. > > On 08/09/20 19:09, Anmol Sharma wrote: >> Hi Franceso, >> >> As I'd mentioned in my previous message, it is my understanding that an >> Aspect can not extend a concrete Aspect. I tried doing as you suggested and >> extended the /LogicInvocationHandler/ to /CustomLogicInvocationHandler/ and >> I see the following error: >> >> Caused by: org.springframework.beans.factory.BeanCreationException: >> Error creating bean with name >> 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': >> BeanPostProcessor before instantiation of bean failed; *nested exception is >> org.springframework.aop.framework.AopConfigException*: >> [org.apache.syncope.core.logic.CustomLogicInvocationHandler] *cannot extend >> concrete aspect* [org.apache.syncope.core.logic.LogicInvocationHandler] >> >> Do you think there could be a workaround here or is hijacking >> /LogicInvocationHandler/ the only option under this circumstance? >> >> Thanks, >> Anmol >> >> On Sat, 5 Sep 2020 at 12:06, Francesco Chicchiriccò <ilgro...@apache.org >> <mailto:ilgro...@apache.org>> wrote: >> >> On 03/09/20 17:31, Anmol Sharma wrote: >>> Hi Franceso, >>> >>> I do not have much experience with AOP but I experimented with it >>> and added a section to [2] to establish some logic to run after [1] as you >>> suggested. I am able to intercept any updates made to privileges after that >>> ApplicationLogic.update method has returned. >>> >>> Here is the code block I added to [2]: >>> @AfterReturning(pointcut = "execution(* >>> org.apache.syncope.core.logic.ApplicationLogic.update(..))", returning = >>> "retVal") >>> public void after(Object retVal) throws Throwable { >>> LOG.info("After logic cut executed for jointPoint >>> ApplicationUpdate: "+ retVal.toString()); } >>> >>> While this seems like a feasible solution, I had to override >>> /org.apache.syncope.core.logic.LogicInvocationHandler/ in my project as >>> suggested here >>> <http://syncope.apache.org/docs/reference-guide.html#customization>. >>> >>> I now have the following questions: >>> (a.) Ideally, I'd like to avoid managing upstream code and only >>> extend upstream logic with customizations. However, it is my understanding >>> that an Aspect can not extend a concrete Aspect such as >>> LogicInvocationHandler. Do you have suggestions on a workaround? Is there a >>> way I can register multiple Aspects in logicContext.xml bean initialization? >> >> There is no need to hijack LogicInvocationHandler; just define your >> own >> >> >> core/src/main/java/org/apache/syncope/core/logic/MyOwnCoolHandler.java >> >> let it extend LogicInvocationHandler and ensure to set >> >> logicInvocationHandler=org.apache.syncope.core.logic.MyOwnCoolHandler >> >> in core/src/main/resources/logic.properties >> >>> (b.) Longer term, do you think there is merit in having an issue >>> track having a ApplicationTO tracked as an EntityTOType or having some >>> mechanism to support LogicActions on Applications? >> >> Honestly, this is the first time we hear such requirement, so I >> really don't know if this is going to happen anytime soon. >> >> Regards. >> >>> [1] >>> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java#L85 >>> [2] >>> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java#L55 >>> >>> Anmol >>> >>> On Wed, 2 Sep 2020 at 12:45, Francesco Chicchiriccò >>> <ilgro...@apache.org <mailto:ilgro...@apache.org>> wrote: >>> >>> On 01/09/20 19:04, anmols wrote: >>> > Hello SMEs, >>> > >>> > I am new to Apache Syncope and I'm planning to use it for >>> users and >>> > permissions management for third-party applications. >>> > >>> > I am trying to model permissions for these applications as >>> privileges that >>> > are associated with roles assigned to a set to users/groups >>> as described >>> > here >>> <http://syncope.apache.org/docs/2.1/reference-guide.html#privileges> . >>> > >>> > I want to trigger some custom logic every time that: >>> > a.) A user gets added to/updated with/deleted from a role >>> assignment. >>> > b.) A privilege that is associated with certain role(s) gets >>> updated. >>> > >>> > I am able to do (a.) using a custom implementation of >>> LogicActions as >>> > described here >>> > >>> <http://syncope.apache.org/docs/2.1/reference-guide.html#logicactions> in >>> > the reference doc. >>> > >>> > I am wondering what is the best way to achieve (b.), i.e. how >>> can I receive >>> > a notification if the privileges for an application are >>> updated such that I >>> > can execute some custom logic? >>> > >>> > I read through the Notification >>> > >>> <http://syncope.apache.org/docs/2.1/reference-guide.html#notifications> >>> > mechanism that is oriented towards sending emails but could >>> not find an >>> > appropriate entry point. >>> > >>> > I think I'm essentially looking for a LogicActions like hook >>> for third-party >>> > application privileges. >>> >>> Hi Anmol, >>> it seems you went quite some far, good! :-) >>> >>> As you have already found out, there is no (yet?) "standard" >>> and clean way to achieve (b). >>> >>> If you have some confidence with AOP, the first thing coming to >>> my mind would be to define a logic cut around method [1], similar to what >>> [2] does, but more retailed to [1]. >>> >>> Does it sound as feasible? >>> Regards. >>> >>> [1] >>> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java#L85 >>> [2] >>> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java#L55 >>> -- Francesco Chicchiriccò Tirasa - Open Source Excellence http://www.tirasa.net/ Member at The Apache Software Foundation Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail http://home.apache.org/~ilgrosso/