Expand my Community achievements bar.

July 31st AEM Gems Webinar: Elevate your AEM development to master the integration of private GitHub repositories within AEM Cloud Manager.
SOLVED

How to show/hide or disable component bases on the user logged in ?

Avatar

Level 3

I have 7-8 components on a page, and all these are the same component with different content( authored differently). Now I want to hide the 4th component for a particular user and the 7th one for another particular user group. Any idea on how to achieve this? The only thing that is making it hard for me is that these 7 are the same component. 

 

I can allow the author to choose which user can access the component through a dropdown, then check which users are allowed and compare with the current user in the sling model. Return a boolean value from the model deciding whether the component should be rendered on that page or not. But I am wondering if there is an easy and more effective way to do this.

Thanks,

Ankan Ghosh

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hello @Ankan_Ghosh - 

 

If you want to hide specific instances of a component on a page based on user permissions, you can consider using the Access Control List (ACL) feature in AEM. Here's an approach you can follow:

 

1. Modify your component's dialog to include a dropdown or multi-select field where authors can choose which user or user group should have access to that particular component instance. Save this information as part of the component's content.

2. In your Sling model, retrieve the ACL property value associated with the current component instance. You can access this information using the `Resource` object associated with the component instance.

3. Compare the user or user group mentioned in the ACL property with the current user's permissions. You can retrieve the current user's information using the `Request` or `ResourceResolver` objects available in your Sling model.

4. Based on the user permissions, determine whether the component instance should be rendered or hidden. Return a boolean value from the Sling model indicating the rendering status of the component.

 

By using this approach, you provide authors with the flexibility to choose specific users or user groups for each component instance. The Sling model can then dynamically handle the rendering logic based on the user's permissions.

Keep in mind that implementing the ACL-based approach requires additional development effort to handle the ACL properties, retrieve user permissions, and make the rendering decision. You should also consider the impact on the authoring experience and ensure proper documentation and guidelines are provided to authors.

 

Alternatively, you can also go via other more performance oriented approaches but that would be requiring more level of customizations & efforts.

View solution in original post

3 Replies

Avatar

Employee Advisor

This is a good use case for content Personalization and should be handled by specialized tools like Adobe Target.

 

You can create different xFragments for different audiences, and export the xFragments [1] to Adobe Target. Now in Target, you can define rules to identify the audience and render the xFragment for the specific audience.

 

[1] https://experienceleague.adobe.com/docs/experience-manager-65/administering/integration/experience-f... 

Avatar

Correct answer by
Community Advisor

Hello @Ankan_Ghosh - 

 

If you want to hide specific instances of a component on a page based on user permissions, you can consider using the Access Control List (ACL) feature in AEM. Here's an approach you can follow:

 

1. Modify your component's dialog to include a dropdown or multi-select field where authors can choose which user or user group should have access to that particular component instance. Save this information as part of the component's content.

2. In your Sling model, retrieve the ACL property value associated with the current component instance. You can access this information using the `Resource` object associated with the component instance.

3. Compare the user or user group mentioned in the ACL property with the current user's permissions. You can retrieve the current user's information using the `Request` or `ResourceResolver` objects available in your Sling model.

4. Based on the user permissions, determine whether the component instance should be rendered or hidden. Return a boolean value from the Sling model indicating the rendering status of the component.

 

By using this approach, you provide authors with the flexibility to choose specific users or user groups for each component instance. The Sling model can then dynamically handle the rendering logic based on the user's permissions.

Keep in mind that implementing the ACL-based approach requires additional development effort to handle the ACL properties, retrieve user permissions, and make the rendering decision. You should also consider the impact on the authoring experience and ensure proper documentation and guidelines are provided to authors.

 

Alternatively, you can also go via other more performance oriented approaches but that would be requiring more level of customizations & efforts.

Avatar

Community Advisor

@Ankan_Ghosh You're thinking in the right direction and this is the easiest/simplest way. Sling model would do the job right. Send a flag from the sling model to your HTL as to whether or not render the component HTML.

 

-Thanks

Bilal