Professional Documents
Culture Documents
Matthew Devaney
A successful app has many different types of users, each with their own needs.
Employees, Managers and Administrators all require unique levels of access to
maintain data privacy and should be able to perform tasks assigned to their role. I
will show you how to design a role-based user interface in Power Apps that adapts
to the person using the app.
We will build the ‘Site Inspections App’ to look like the image below. I have used a
different color scheme for each role but my instructions do not include how to do
this.
Make a new SharePoint list called ‘App Users‘ with two columns: User (Person
column type) and Role (Choices column type) with the options Employee, Manager
and Administrator. Any people in the User column will need to exist within your
organization so you will need to choose different names than I do.
User Role
Open Power Apps and create a new Canvas App From Blank called Site Inspections
App.
When the user starts the app we need to determine their user details (varUser) and
role (varRole). Put this code in the OnStart property of the app.
// Find the user with a matching email in the App Users list
With(
{wUserRecord: LookUp('App Users', User.Email=varLoggedInUser.Email)},
Set(varUser, wUserRecord.User);
Set(varRole, wUserRecord.Role.Value)
);
// If matching user is not found, insert a new user into the list with the role
If(IsBlank(varRole),
With(
{wUserRecord:
Patch(
'App Users',
Defaults('App Users'),
{
User: {
'@odata.type':"#Microsoft.Azure.Connectors.SharePoint.S
Claims:"i:0#.f|membership|"& varLoggedInUser.Email,
Department: "",
DisplayName: varLoggedInUser.FullName,
Email: varLoggedInUser.Email,
JobTitle: "",
Picture: ""
}
}
)
},
Set(varUser, wUserRecord.User);
Set(varRole, wUserRecord.Role.Value)
)
);
Now we will display the User’s name and role in the app.
Place a Person icon on the Title bar. Then insert a label beside it with the following
code in the Text property:
varUser.DisplayName
Also add a Lock icon to the Title bar. The label beside it should have this code in the
Text property:
varRole
Your name and role should now appear in the app. If you want to use the app as
another person (example: Jennifer Houston) for testing purposes simply hard-code
their email in the app’s OnStart property as shown below.
Set(varLoggedInUser, User());
With(
{wUserRecord: LookUp('App Users', User.Email="jennifer.houston@companyname.
Set(varUser, wUserRecord.User);
Set(varRole, wUserRecord.Role.Value)
);
Then run the app’s OnStart property to see the changes take effect. Remember to
remove the hard-coded employee email before publishing the app.
Filter Records Based On User Role
An employee should only be able to view their own records in the app whereas a
manager or an administrator can see all records in the datasource.
Build another SharePoint list called ‘Site Inspections’ with the following columns:
LocationName (single-line text), OverallRating (number), InspectionDate (date),
InspectedBy (person)
In Power Apps, create a new connection to the ‘Site Inspections’ SharePoint list.
After that, insert a gallery onto the screen with ‘Site Inspections’ as the datasource.
Format the gallery to display information as shown in the image below using labels,
an edit icon and the rating control. Add a label above the gallery to act as a
header row.
Jennifer Houston is has the role Employee so she should only see 3 records. Put this
code in the Items property of the gallery.
If(
varRole="Employee",
Filter('Site Inspections', InspectedBy.DisplayName=varUser.DisplayName),
'Site Inspections'
)
Whereas the Manager Sarah Green can see every record.
An Administrator is the only role which has the ability to delete records from the
datasource. Add a Delete icon to the gallery as shown in the picture below.
Then use this code in the Visible property of the Delete icon
varRole="Administrator"
The Delete icon will show for the administrator and disappear for employees and
managers making it impossible to click.
Sign Me Up
Questions?
If you have any questions or feedback about designing a role-based user-interface
in Power Apps please leave a message in the comments section below. You can
post using your email address and are not required to create an account to join
the discussion.
Matthew Devaney
POWER APPS
POWER APPS
POWER APPS
POWER APPS
POWER APPS
POWER APPS
21 COMMENTS Oldest
Learning a lot from you. Thank you for the great article.
Reply
As Power App runs on the user context and if user knows the SP site URL, the
user can view/manipulate entire data as we are not trimming the security on
SharePoint list.
If this does not help, we definitely need to trim the security on SharePoint list
items level, which will degrade the performance of the SharePoint list and
Power App. Alternatively, we can use CDS for record level security (it is
premium).
Reply
You can also extend this by having a data source where the user can
configure the roles different people are allowed to have – so that if people
move on / join the company, you don’t need to edit hard values in the app
itself, instead you can just refer to the dynamic configuration
I’ve even hidden entire sections of functionality behind the user-role check,
like reporting using embedded Power BI tiles. It adds an extra layer of usability
without having to maintain several similar apps. Thanks for sharing for the
community! <3
Reply
This is so great! Thank you! Will the role validation work with Groups selected
in the SharePoint list?
Reply
Reply
Reply to venkataramana
Venkataramana,
Please click the three dots beside the app object in the left menu of Studio
and try to run the OnStart property of the app.
Reply
@odata.type’:”#Microsoft.Azure.Connectors.SharePoint.SPListExpandedUser”,
Claims:”i:0#.f|membership|”& varLoggedInUser.Email, –
where did you get that part from?
Reply
Reply to Eva
Eva,
Reply
Reply to carl
Carl,
I hate to say it but that sounds like a Power Apps bug. Have you tried
changing the publisher version in advanced settings? Sometimes when
Power Apps does weird stuff like this its because a bug was introduced.
Reply
Carl,
Set(varLoggedInUser, User());
Set(varDet,LookUp(‘App
User’,User.Email=”priyesh@companyname.com”));
With(
{
wUserRecord:varDet
},
Set(
varUser,
wUserRecord.User
);
Set(
varRole,
wUserRecord.Role.Value
);
Reply
Reply
Reply to Steffen
Steffen,
It refers to SharePoint. I don’t have any plans to write a copy of this article
for Dataverse right now but the basic concepts are right here in the article.
Reply
Reply
Reply to Pooja
Pooja,
My example only allows one role per employee. You would need to change
the SharePoint list to accept multiple values in the Role column.
Reply
Asheer 8 months ago
Dear Matt,
Can I pull the employee, manager and administrator records from SharePoint
list instead of O-365? as I have a scenario wherein users are not in Azure AD.
Pls advise.
Reply
Reply to Asheer
Asheer,
Reply
The above worked for me, however when I list multiple If functions in the
formula it is unable to filter the information. So, I was trying to have it as
IF(varRole=“Marketing”, IF(VarRole=“Accounting”,If(varRole=“Human
Resources”, and so on…
and then the filter function is listed after it. When I tested it out it wouldn’t
populate the data in the Gallery. Then when I tested it out with only having
one IF function it worked and I was able to see the data for let’s say only
Marketing.
Thank you!
Reply
This is great! But what if the image and the username controls are in a
component and shared on several screens? How can I make it work?
Reply
Thanks for all of these great posts! This was a great help for a side-project of
mine. I am having an issue. I am having an issue with not being able to get
the Role variable to work. I cannot get it to display nor work in Visible control
formulas, and everything matches your example, minus my variables are
customizes for my situation, as are the column names and values in my SP
list. I even gave changing all the variables to match the example, just in case I
was missing a typo somewhere.
Reply
Subscribe
Subscribe to get new Power Apps articles sent to your inbox each week for FREE.
I Want In >>
Create Power Apps Collections Over 2000 Rows With These 4 Tricks