Hi @prince_shivhare
Maybe instead of /libs/cq/core/content/tools, you can overlay directly /libs/cq/core/content/nav/tools.
Then use granite:rendercondition to control the access for specific tool of your choice.
After you export the /apps/cq/core/content/nav/tools from AEM you will see an xml similar with the one below:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
xmlns:granite="http://www.adobe.com/jcr/granite/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured">
<tools
jcr:primaryType="nt:unstructured"
jcr:title="Tools"
id="cq-tools"
order="{Long}200">
<workflow jcr:primaryType="nt:unstructured">
<granite:rendercondition
jcr:primaryType="nt:unstructured"
sling:resourceType="/apps/my-project/.../my-condition" />
</workflow>
.....
<general
jcr:primaryType="nt:unstructured"
sling:orderBefore="workflow">
<crxdelite
jcr:primaryType="nt:unstructured">
<granite:rendercondition
jcr:primaryType="nt:unstructured"
sling:resourceType="/apps/my-project/.../my-condition" />
</crxdelite>
.....
<my-tool
jcr:primaryType="nt:unstructured">
<granite:rendercondition
jcr:primaryType="nt:unstructured"
sling:resourceType="/apps/my-project/.../my-condition" />
</my-tool>
</general>
<cloudservices jcr:primaryType="nt:unstructured">
<granite:rendercondition
jcr:primaryType="nt:unstructured"
sling:resourceType="/apps/my-project/.../my-condition" />
</cloudservices>
</tools>
</jcr:root>
I have not added the entire XML, I only kept few of the Tools available ootb just for you to get an idea. In addition I added one called my-tool, which might be your tool there.
In this way you can control access to any tool, custom or ootb one, by adding granite:condition. You can see it points to /apps/my-project/.../my-condition, which will be a custom resource backed-up by a Sling model:

And in the Sling model you can implement your logic to decide whether the current logged in user should have access or not to the given tool.
So you can get the Authorizable from the resource resolver.
...
final Session session = resourceResolver.adaptTo(Session.class);
final UserManager userManager = resourceResolver.adaptTo(UserManager.class);
userManager.getAuthorizable(session.getUserID()
...
And then use existing API to find maybe in which group this Authorizable is and based on the group decide if it should have access or not to the tool: https://developer.adobe.com/experience-manager/reference-materials/6-4/javadoc/org/apache/jackrabbit/api/security/user/Authorizable.html
I would not worry about performance as this is probably mainly for Editors within the company, so they should not put that much of a request load on AEM. Plus, we are talking only about author tier/instance, so live site is not impacted.