cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
oml
Helper III
Helper III

Entity Permissions on PowerApps Portal

Hi,

 

I have a demo portal for like property management/rental/sales: link to the site

 

in my CE environment, I have a custom entity named "Property Unit" (like an apartment).

 

On the portal, I can browse through all the units/apartments as an anonymous user of the portal. But it is also possible to log in as current tenant to quickly get an overview of "My Units" (page on the portal). So for that to work, I have set up the entity permission for the "Property Unit" entity and that is almost working as I wanted.

 

So, I can browse through all the units as an anonymous AND authenticated user on this page: page to browse available units .

 

I can log in as an authenticated user and go to "My Units" page and only see the units where this particular user is a tenant.

 

Both "My Units"-page and "the browse all units"-page has assigned an entity list in the portal management.

 

Now, when I browse through all available units and click into one specific unit a new page will show a more detailed view of this particular unit. So basically a "Detailed"-page: example .

 

When I'm not signed in to the portal, so when I'm browsing as an anonymous user, this is working just fine. However, if I'm logged in as an authenticated user (like an existing tenant), this detailed page is not showing the unit data. This tells me that there might be something entity permission going on on this page but my problem is I can't control it like the other pages because there is no Entity List attached to the detailed page.

 

I fetch my unit data for the detailed page like this:

 

{% extends 'Layout 1 Column' %}
{% block main %}
<!-- Paste Code from doc here -->

{% assign unit = entities['crc17_propertyunit'][request.params.id] %}

<section>
    <div id="myCarousel" class="carousel slide" data-ride="carousel">
      <!-- Indicators -->
      <ol class="carousel-indicators">
        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
        <li data-target="#myCarousel" data-slide-to="1"></li>
        <li data-target="#myCarousel" data-slide-to="2"></li>
        <li data-target="#myCarousel" data-slide-to="3"></li>
      </ol>

      <!-- Wrapper for slides -->
      <div class="carousel-inner">
        <div class="item active">
          <img src="https://i.imgur.com/DHixQaX.jpg" title="source: imgur.com;"/>
        </div>

        <div class="item">
          <img src="https://i.imgur.com/c9o7I6g.jpg" title="source: imgur.com;"/>
        </div>

        <div class="item">
          <img src="https://i.imgur.com/WGDKp79.jpg" title="source: imgur.com;"/>
        </div>

        <div class="item">
          <img src="https://i.imgur.com/prIoBZE.jpg" title="source: imgur.com;"/>
        </div>
      </div>

      <!-- Left and right controls -->
      <a class="left carousel-control" href="#myCarousel" data-slide="prev">
        <span class="glyphicon glyphicon-chevron-left"></span>
        <span class="sr-only">Previous</span>
      </a>
      <a class="right carousel-control" href="#myCarousel" data-slide="next">
        <span class="glyphicon glyphicon-chevron-right"></span>
        <span class="sr-only">Next</span>
      </a>
    </div>
</section>
<section>
    <h2>{{ unit.crc17_streetname }}</h2>
    <div>{{ unit.crc17_zipcode }} {{ unit.crc17_city }}, {{ unit.crc17_country }}</div><br/>
    <div class="container">
        <div class="row" style="padding-bottom: 15px;">
            <div class="col-md-2">Rent /month - {{ unit.crc17_marketrent | round }}</div>
            <div class="col-md-2">Move in - {{ unit.crc17_expectedavailable | date: 'MMMM dd, yyyy' }}</div>
            <div class="col-md-2">Case no. - {{ unit.crc17_name }}</div>
        </div>
        <div class="row" style="padding-bottom: 15px;">
            {% if unit.crc17_rooms.label == '1' %}
            <div class="col-md-2">Room - {{ unit.crc17_rooms.label }}</div>
            {% else %}
            <div class="col-md-2">Rooms - {{ unit.crc17_rooms.label }}</div>
            {% endif %}
            <div class="col-md-2">Size - {{ unit.crc17_size }} m2</div>
            <div class="col-md-2">Type - {{ unit.crc17_unittype.label }}</div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <button onclick="window.location.href='https://yavica-self-service.powerappsportals.com/properties/book-viewing/?id{{ entitylist.detail_id_parameter }}={{ unit.id }}';" style="float: right; padding-top: 5px;">
                    Book Viewing
                </button>
            </div>
        </div>
    </div><hr>
    <h4>Description</h4>
    <div>{{ unit.crc17_description }}</div>
    
</section>

{% endblock %}

 

 

Can I disable the entity permission in liquid code or something?

 

 

11 REPLIES 11
Pranjali
Community Support
Community Support

Hello Partner,

 

Recommendation is to always use Entity Permissions and use liquid to filter based on logged in user-context.

Adding the documentation link for the liquid params already available https://docs.microsoft.com/en-us/powerapps/maker/portals/liquid/liquid-objects.

 

You could validate once to ensure that the Entity referenced in the page is give access to in the Entity Permissions (if not assigned or permission not available, you will see a blank page).

you can also change scope and set it to 'global' to test if you can see and then limit from there.

 

Cheers,

Pranjali

Hi @Pranjali,

 

Thanks for your post!

 

I believe my problem is occurring because I'm not actually using the

{% entitylist id:page.adx_entitylist.id %}

tag for showing data on the "detailed page" and instead just fetching data directly from the CDS by doing so: 

{% assign unit = entities['crc17_propertyunit'][request.params.id] %}

 

So if I go and change the way I fetch my data and start using:

{% entitylist id:page.adx_entitylist.id %}

, how do I then fetch a specific record by ID? From the previous page (browse all units page), I'm sending an ID forward in the request.params to the "Detailed page" to fetch data for this record only.

 

How do I fetch a specific record by the request.params.id without doing a for loop on the: 

{% entitylist id:page.adx_entitylist.id %}​

 

OliverRodrigues
Most Valuable Professional
Most Valuable Professional

Hi

 

I actually registered in your portal to test and seemed to work fine the "details" page

you can retrieve data directly from CDS there is no issues there

you always need an Entity Permission if you are retrieving data via Liquid/oData, and I am assuming you have that because it is working for non-authenticated users.. the Entity Permission has a subgrid to Web Roles, can you make sure you have it associated with both Anonymous and Authenticated Users?

 

------------

If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.




If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

Power Pages Super User | MVP


Oliver Rodrigues


 

Hi @OliverRodrigues,

 

Sorry for the late reply. Thanks a lot for reaching out.

 

Regarding your "test" by registering on the portal and accessing the page while logged in. The reason it is showing the data as it should for you is that at the moment you don't get any web role when you register on the portal by default. That is managed manually in CE. I have now added the "Anonymous User" and "Authenticated User" to your user.

 

If you go check now, it doesn't show any data on the "details" page, but on the "properties for rent/buy" page the data is still shown. I believe the reason for the data is shown on the "properties for rent/buy" page is because I have created an entity list for that page and unchecked this:

entity permissions off.PNG

 

This is on purpose because I want everyone to browse my properties whether you are logged in or not.

 

So for your registered user, you won't see any data on the "details" page now unless I made you tenant of one or more of the units in CE and you happen to click on one of these. Otherwise, all other units (the ones you are not a tenant of) will not show data. Though, if you went to "My Units" page you would see the units you are a tenant of.

 

There is like a conflict between how units are shown in "My Units" page and the "details" page, or actually, the pages are showing the same thing, but I want the "details" page to show unit data regardless of the type of user visiting the portal - just like the "properties for rent" page.

 

So I was wondering if I could control the entity permission setting in liquid code when retrieving data directly from CDS on the "details" page because if I could disable the entity permission (just like on the "properties for rent" page) I believe it should show the unit data regardless of the user, right?

 

I hope it's making sense... 🙂

Hi.. sorry about the delay

 

I am still a bit confused with your scenario.. I will try to recap what I understood

 

  • you have a rent page with an Entity List, but entity permissions disabled and that's okay (keep entity permissions disabled for this list)
  • you have a details page with a custom render via Web Template/Liquid --> if you are retrieving data via code (oData or Liquid), you must have entity permissions, you can have the entity permissions for both anonymous and authenticated users
  • you have a my units page with an Entity List, and I guess you need entity permissions here to show only records associated with the user --> keep entity permissions enabled for this list and create an entity permissions just for authenticated users

 

does that make sense ?

 

------------

If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

 




If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

Power Pages Super User | MVP


Oliver Rodrigues


 

Hi @OliverRodrigues ,

 

No worries at all. I really appreciate your help!

 

Seems like you understand the scenario. Tho, I have a few questions:

 

  • rent page: all good - this page is also working as intended.
  • details page: I am retrieving data with liquid as I posted in my code sample above. I haven't added any entity list to this page my self. As for as I understand, please correct me if I'm wrong, you need an entity list to control if the data from an entity list is controlled by entity permissions, right? But this page, even tho I have not added an entity list (with entity permissions enabled) still seems like it does have entity permissions enabled, as the data I retrieve is not shown properly. Or maybe I'm misunderstanding something and need to somehow add an entity list to this page and change my liquid code to use this entity list instead of this fetch: 

 

{% assign unit = entities['crc17_propertyunit'][request.params.id] %}​


In fact, this page is behaving just like the My Units page. If you are logged in as a user (e.g. a tenant) you will only see data on this page, if you happen to click on the same unit that you are associated with.

Example:
So let's say as a tenant you are associated with "Unit no. 123". On the rent page, you browse through the units. When you click on any unit other than "Unit no. 123" it will take you the details page a not show any data. But if you click on "Unit no. 123" on the rent page it will take you to the details page and show the data because this unit you are associated with. (Just like the My Units page).

I hope that didn't confuse you even more... 😅

 

  • My Units page: this also works properly. This page only shows associated units.

 

Here is a screenshot of my current entity permissions for "Property Unit" (Unit):

unit - entity permissions portal.PNG

 

Thank you very much for your time!

Hi 

 


@oml wrote:

...

  • details page: I am retrieving data with liquid as I posted in my code sample above. I haven't added any entity list to this page my self. As for as I understand, please correct me if I'm wrong, you need an entity list to control if the data from an entity list is controlled by entity permissions, right? 

...


No. I think here is where you are mixing things up. You don't need entity list to control permissions to access Portal data. Permissions are required/optional depending on your configuration:

  • Entity List/Entity Form/Web Form- you need to enable entity permissions if you want to add security, otherwise it will be available for everyone
    • If you need to show notes/sharepoint documents, you must have entity permissions for those, otherwise there is no need
  • When retrieving data via custom code (oData / Liquid / Fetch / WebAPI) you MUST have entity permissions setup, but there is no relation here to entity list, you can come from an entity list (without entity permissions) and get to a web page and render data via liquid so it would require entity permissions

 

Do you need the 3 entity permissions you have setup? in my opinion you need two entity permissions

  • propertyunit - contact level - authenticated web role --> this is to be used in the my units page
  • propertyunit - global - authenticated and anonymous web role --> this is to be used in the details page via custom Liquid code

 

and just one final thing that you might be getting a bit mixed up, although this is not critical, the below is not a Fetch, you are retrieving data via Liquid Entity object, not a FetchXML

 


@oml wrote:
  • ..... change my liquid code to use this entity list instead of this fetch: 

 

 

{% assign unit = entities['crc17_propertyunit'][request.params.id] %}​

 

 

...




If you like this post, give a Thumbs up. Where it solved your request, Mark it as a Solution to enable other users find it.

Power Pages Super User | MVP


Oliver Rodrigues


 

Hi @OliverRodrigues,

 

Apologies for the very late reply and thanks for your post.

I had another project that needed my time.

 

I have now had some time to play around the entity permissions again. But without any luck.

 

Let me quickly explain what I have been testing and what I have at the moment:

 

Entity Permissions:

I now just have the two permissions as you suggested:

  • contact level - authenticated web role
  • global level - authenticated web role & anonymous web role

 

New test pages:

I have created a new page, "My Page"( link ) with a new entity list for my custom entity "Property Unit". For this entity list, I have enabled "View details" and target another new page, "My Page Details". I have NOT enabled entity permissions for this entity list.

 

This is how I retrieve data on the details page:

 {% assign unitid = request.params.id %}
    {% entityview logical_name:'crc17_propertyunit', name:"Unit Quick Details - Portal", page_size: 50 %}
    {% assign units = entityview.records | where: "crc17_propertyunitid", unitid %}
    {% assign unit = units.first %}

        <div>Unit Case no. - {{ unit.crc17_name }}</div><br/>
        <div>Address - {{ unit.crc17_streetname }}</div>
 {% endentityview %}

 

When you are not signed in to the portal this is working fine. However, when you sign in to the portal with a user which has some units assigned in CE, the details page is not showing data.

 

 

So a quick recap of what I'm trying to accomplish after all these posts:

 

  1. I want an entity list (rent page) where you can browse through the units, click on a certain unit and get a details view of the unit (details page).
  2. I want an entity list (My Units) showing me the related units for the logged-in user. 
  3. As a logged-in user, I want to be able to browse through the rent page with all the units available, just like point 1.

Point 1 and 2 is accomplished, however, point 3 is not.

 

I really didn't expect to struggle this much trying to make this work... 😅

 

😅

Hi @oml,

 

I have recently created a blog post (https://justinburch.com/portal-security-2) providing instructions to see how Entity Permissions are being applied. While this is mostly useful to see how lists are manipulated, you should be able to identify if Entity Permissions are the cause of the issue (if the record doesn't show up when the show parameter is set to True).

 

Your issue definitely seems to be Permission related. I would recommend removing the Read permission from your Contact level Entity Permission, and using only the other applicable permissions. The Global permission will handle all scenarios for reading the data. Next, make sure that this Global permission is associated to both Anonymous and Authenticated Web Roles (I know - just double check!) and reset the cache (/_services/about as an admin contact).

 

I hope this helps,

Justin

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results |Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!    This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 1: Community MembersSolutionsSuper UsersSolutionsPower Pages @Inogic  1   @ragavanrajan  2 @aofosu  1 @Jcook  1Open  @OliverRodrigues  1Open  @Lucas001  1Open Open    Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 2: Community MembersSolutionsSuper UsersSolutionsPower Pages @taraubianca25  2 @EmadBeshai  2 @ALP2  2@Fubar 2 @ekluth1  2@ragavanrajan 1 @mandela  1@OliverRodrigues 1 @Ajlan  1Open   @elishafxx  1    @TA_Jeremy  1    @helio1981  1       Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Week 3:Community MembersSolutionsSuper UsersSolutionsPower PagesInogic2@EmadBeshai 6Ajlan1@ragavanrajan 4CraigWarnholtz1@Fubar 4  @Jcook 3  @OliverRodrigues2   Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower PagesHenryed071Fubar3Inogic1OliverRodrigues2JacoMathew1EmadBeshai2faruk11  TA_Jeremy1   shubhambhangale1   doug-ppc1   hubjes1  

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

  On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages