One way of doing that is to have a structure like

<section>
    <condition>
     <if-has-permission permission="XERUS" action="_ADMIN"/>
    </condition>
    <widgets>
        One
    </widgets>
    <fail-widgets>
           <section>
                <condition>
                      <if-has-permission permission="XERUS_ASSETMAINTENANCE"
action="_VIEW"/>
                </condition>
                <widgets>
                   two
                </widgets>
                <fail-widgets>
                        default
                </fail-widgets>
            </section>
    </fail-widgets>
</section>

That is not elegant.


Another way I prefer is to have a script that define the screen to render like :

<screen name="XerusHomePageDecorator">
    <section>
        <actions>
            <script location="component://xerus/groovyScript/selectScreenByPermission.groovy"/>
        </actions>
        <widgets>
            <include-screen name="${detailScreen}"/>
        </widgets>
        <fail-widgets>
            <label style="head2">${uiLabelMap.XerusPermissionIssue}</label>
        </fail-widgets>
    </section>

</screen>

The content of the groovy with something like :

if (security.hasEntityPermission("XERUS", "_VIEW", session) {

    context.detailScreen = 'XerusView'

} else if ( ... ) {

   context.detailScreen = 'XerusXXX'

}

And the screens in the same ScreenFile like :

<screen name="XerusView">
    <section>
        <widgets>
            <platform-specific><html><html-template location="component://xerusTheme/webapp/xerusTheme/includes/PreBody.ftl"/></html></platform-specific>
        </widgets>
    </section>
</screen>

HTH

Gil

Le 11/04/2023 à 09:57, Mahi maheshwari a écrit :
Thanks for the response Gil, But I was asking for applying multiple
conditions as mentioned below

<screen name="XerusHomePageDecorator">
     <section>
         <actions>
             <property-map resource="XerusThemeUiLabels"
map-name="uiLabelMap" global="true"/>
             <property-map resource="CommonUiLabels" map-name="uiLabelMap"
global="true"/>
             <set field="layoutSettings.companyName"
from-field="uiLabelMap.XerusThemeCompanyName" global="true"/>
             <set field="layoutSettings.styleSheets[]"
value="/xerusTheme/css/bootstrap.min.css"/>
            <set field="layoutSettings.javaScripts[+0]"
value="/xerusTheme/js/bootstrap.min.js" global="true"/>
         </actions>
         <widgets>
             <section>
<if>
    <condition>
      <if-has-permission permission="XERUS" action="_ADMIN"/>
    </condition>
  <then>
    <widgets>
      <platform-specific><html><html-template
location="component://xerusTheme/webapp/xerusTheme/includes/PreBody.ftl"/></html></platform-specific>
       <decorator-section-include name="pre-body"/>
       <decorator-section-include name="body"/>
      <platform-specific><html><html-template
location="component://xerusTheme/webapp/xerusTheme/includes/PostBody.ftl"/></html></platform-specific>
    </widgets>
  </then>
<else-if>
    <condition>
       <if-has-permission permission="XERUS_ASSETMAINTENANCE"
action="_VIEW"/>
    </condition>
  <then>
    <widgets>
       <decorator-screen name="main-decorator"
location="${parameters.mainDecoratorLocation}">
          <decorator-section name="body">
             <platform-specific>
                <html><html-template
location="component://xerus/webapp/xerus/crud/ListOfAssets.ftl"/></html>
             </platform-specific>
          </decorator-section>
       </decorator-screen>
    </widgets>
  </then>
</else-if>
<else-if>
    <condition>
       <if-has-permission permission="XERUS_PRODUCTION" action="_VIEW"/>
    </condition>
   <then>
     <widgets>
       <decorator-screen name="main-decorator"
location="${parameters.mainDecoratorLocation}">
        <decorator-section name="body">
           <platform-specific>
              <html><html-template
location="component://xerus/webapp/xerus/crud/ProductionView.ftl"/></html>
           </platform-specific>
        </decorator-section>
       </decorator-screen>
     </widgets>
   </then>
</else-if>
<else>
   <label style="h3">${uiLabelMap.XerusViewPermissionError}</label>
   <label style="h3">You are not allowed to view this page.</label>

</else>
</if>

</widgets>
  </section>
</screen>


but this is not working as I expected, please guide me if anywhere I'm
going wrong.

Best Regards,
Maheshwari.

On Tue, Apr 11, 2023 at 12:52 PM Gil Portenseigne <
gil.portensei...@nereide.fr> wrote:

Hello Mahi,

You can find multiple examples in the code base looking for :
`<fail-widgets>`

One of :

<section>
      <condition>
          <if-service-permission
service-name="workEffortGenericPermission" main-action="VIEW"/>
      </condition>
      <widgets>
          <platform-specific><html><html-template

location="component://workeffort/template/task/MyTasks.ftl"/></html></platform-specific>
      </widgets>
      <fail-widgets>
          <label
style="h3">${uiLabelMap.WorkEffortViewPermissionError}</label>
      </fail-widgets>
</section>

If condition is true, widgets will display, else that will be fail-widgets

Regards

Gil

Le 11/04/2023 à 09:08, Mahi maheshwari a écrit :
Hello Community,

I want to add .ftl files in screens.xml for multiple users based on a few
conditions if there are multiple users named production user and quality
user and other users, so for this users if I want to give permission for
viewing any .ftl files, how can I do it.

*for instance*, if production_user has permission to view only the
production module then render production.ftl ,  if quality_user has
permission to view only the quality module then render quality.ftl and if
assets_user has permission to view the assets module then render
assetmaint.ftl.
I want to give conditions like if else in one <screen> tag in screens.xml

*example: *
in widgets/screens.xml
<screen name="screenName">
if(User has Production_View permission)
then
<html><html-template

location="component://xerus/webapp/xerus/crud/ProductionView.ftl"/></html>
else if(User has AssetMaintaince_View permission)
then
<html><html-template
location="component://xerus/webapp/xerus/crud/ListOfAssets.ftl"/></html>
else if(User has Quality_View permission)
then
      <html><html-template

location="component://xerus/webapp/xerus/crud/QualityMainPage.ftl"/></html>
else
<html><html-template
location="component://xerus/webapp/xerus/crud/NoPermission.ftl"/></html>
END of if
</screen>

please let me know how can I achieve this.


Best Regards,
Maheshwari.

Reply via email to