cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
AdamH
Post Patron
Post Patron

Restrict users to see specific records

Hi All, 

 

I'm trying to improve an application I made that hides certain records from staff if there user email is not hard coded into the app - I have been using [on visible] varUserEmail = ect. 

 

I have created a SP list which will contain the users email / their name and a selection of YES / NO choice options which acts as their level of access, such as Generic User, Manager, MST and so on.  I would like to be able to use the choice options to be able to restrict what records they can see. 

2021-09-11 20_38_34-Window.png

 

I have also created another SP List which will contain the records I want to restrict to certain users - It follows a similar selection of YES / NO choice fields

2021-09-11 20_42_20-Window.png

The test record above, will be available to Generic Users, Managers, SPUC and MST. If the user above in the first Image logs into the app they will be able to see this record. 

 

How would I accomplish something like that?

 

Thanks 

15 REPLIES 15
WarrenBelz
Super User
Super User

Hi @AdamH ,

I do not fully understand the connection between the lists, but this code will return true or false on the first list as to whether the user is a PPE user. How do you connect the user to the second list?

Set(gblUser,User());
Set(
   gblPPEUser,
   LookUp(
      NCUserCodes,
      'User Email' = gblUser.Email
   ).'PPE User'
)

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

hi @WarrenBelz 

My thinking was....

 

EXAMPLE:

USER 1 has PPE selected to YES which is contained in [SP LIST A]

RECORD A - Has PPE & MANAGER selected to YES in [SP LIST B]

RECORD B - Has MANAGER selected to YES in [SP LIST B]

 

If USER 1 logs in, they will see RECORD A but not RECORD B because record B does not have PPE selected

 

I haven't got the SP lists linked yet but that was my thinking. I was looking to see when a user logs in, if their record has any of the choice fields selected to YES, then that would filter all the data records that had the same choice field selected to YES.

 

What do you think?

Hi @AdamH ,

Either a lot of hard coding as you cannot refer to field names dynamically or you (do as I do) simply have one list with the various authorities per user.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

AdamH
Post Patron
Post Patron

Hi @WarrenBelz 

 

Could you share an example of this?

@AdamH ,

Do you mean the one list with all details? I personally would not attempt the hard-coding path (my brain hurts thinking about it) when you can simply make a list with all the information you need.

v-jefferni
Community Support
Community Support

Hi @AdamH ,

 

The point of designing tables as data source for Power Apps is avoid to set specific information as column names, because column names could not be retrieved into Power Apps to use elsewhere.

 

In this case if possible, you may edit both lists that adding a Choices column which allows multiple selections and include all those access levels. You will be able to get specific user's access level via:

LookUp(List, 'User Email' = User().Email).'Access Level'

This is a table and you could also create a collection OnStart of the App to use it repeatedly:

ClearCollect(colLvl, LookUp(List, 'User Email' = User().Email).'Access Level')

 

Now you can filter the codes list by its own Access Level column selections:

ForAll(colLvl, Filter(Codes, Value in 'AccessLevel'))

 

You could refer to below thread to know more about the filter method:

Solved: Filter multiple selection choice column - Power Platform Community (microsoft.com)

 

Hope this helps.

 

Best regards,

Community Support Team _ Jeffer Ni
If this post helps, then please consider Accept it as the solution to help the other members find it.

 

@WarrenBelz 

 

I took a few days out to have a think and just confirm how I would like it to work and decided maybe the best way to try and put it across was to sketch and example in excel 

2021-09-15 20_48_03-Window.png

 

 

Hi @v-jefferni 

 

I'm going to look at your suggestion and have a go - see what I can do

@AdamH ,

This is syntax guidance only based on your Excel example, but this will return true or false as to whether the user has access to the record

With(
   {
      wAccess:
      LookUp(
         SPList2,
         UserEmail=User().Email
      )
   },
   UpdateContext(
      {
         varAccess:
         (ThisItem.L1 && wAccess.L1) ||
         (ThisItem.L2 && wAccess.L2) ||
         (ThisItem.L3 && wAccess.L3) ||
         (ThisItem.L4 && wAccess.L4)
      }
   )
)

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.

Top Solution Authors
Top Kudoed Authors
Users online (2,791)