Hi Francisco, I was able to verify that adding these annotations works and helps me intercept the logic layer for application privilege updates.
Thanks Anmol On Wed, Sep 9, 2020, 4:29 AM Francesco Chicchiriccò <[email protected]> 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ò <[email protected]> > 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ò <[email protected]> >> 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 Excellencehttp://www.tirasa.net/ > > Member at The Apache Software Foundation > Syncope, Cocoon, Olingo, CXF, OpenJPA, > PonyMailhttp://home.apache.org/~ilgrosso/ > >
