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?
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 %}
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.
Power Pages Super User | MVP
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:
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
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.
Power Pages Super User | MVP
Hi @OliverRodrigues ,
No worries at all. I really appreciate your help!
Seems like you understand the scenario. Tho, I have a few questions:
{% 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... 😅
Here is a screenshot of my current entity permissions for "Property Unit" (Unit):
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:
Do you need the 3 entity permissions you have setup? in my opinion you need two entity permissions
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] %}
...
Power Pages Super User | MVP
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:
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:
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
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!
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
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.
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