I am new to Jaspersoft & am trying to try implement row level security at a domain level.
I have a very simple domain (one user table with a user_id column). This user_id references the ID of the users already present in Jaspersoft. (Basically, I want the logged in user to see his details in the report). When I just defined the domain without any security, domain was created fine, I could create views & reports.
But when I attach the security file, the domain is throwing up errors.
This is the error I get -
The Domain data source /Test_Domain is invalid. exception parsing filter string 'public_test.user_id == authentication.getPrincipal().getId()'
This is the security file -
<securityDefinition xmlns="http://www.jaspersoft.com/2007/SL/XMLSchema" version="1.0" itemGroupDefaultAccess="granted"><resourceAccessGrants>
<resourceAccessGrantList id="public_test_List" label="ListLabel" resourceId="public_test">
<![CDATA[authentication.getPrincipal().getId() > 0 ]]>
public_test.user_id == authentication.getPrincipal().getId()
Any thoughts on what I am doing wrong. I am on Jaspersoft 4.7
Any help is appreciated.
Posted on November 7, 2012 at 9:41am
The filter expression is an expression in DomEL expression language.
To access authentication object, you need to use groovy call, i.e. the expression should look like :
public_test.user_id == groovy('authentication.getPrincipal().getId()')
Note that principal expression is already in the groovy scope.