Security filter for table data shared by some users over multiple business units

I'm struggling with establishing security within a single dataset that four distinct business units share. 15 users share the dataset. Most have access to just one business unit's data. But some have access to two or three, and at least one user will have access to all four.

The app is specialized in service ticket tracking over multiple service boards. It works great on a single data set for one company (mine). But now, I need to create a copy that will work on a single data set for four distinct business units. 

I've created a table named Master to list the four business units. I've also created a table named Master User List to establish which USEREMAIL() accounts have access to which Business Units.

Master table

KeyBusiness Unit NameAddress...etc.. 
9873jfa3Alpha Business Unit   
839la8xOmega Business Unit   

Master User List table

Key

Master List
(Enum List, Ref)

User NameAppsheet User EmailEtc..
8sliej29873jfa3Alpha Useruser1@... 
j29kdjfl9873jfa3839la8xMixed Useruser2@... 
8c9sl32839la8xOmega Useruser3@... 

The app has separate tables for Company, Site, and Contacts so users can track multiple locations and contacts for each company. The Tickets table holds all tickets for all companies across all business units.

I've tried to scope out various options to filter which users can access which data entries in CompanySiteContactsTickets, and other similar tables based on the Master and Master User List lookup tables, but it's just not coming together.

Any guidance is very much appreciated. Thank you.

 

Solved Solved
1 5 130
1 ACCEPTED SOLUTION

First, to help simply filtering based on the current logged in user,  I recommend following this post on creating a CurrentUser slice.  It allows "clean" access to the current user details.

Once you have created the above, then you can apply a  Security Filter to the "Master" table like so:

In([Key], ANY(CurrentUser[Master List])

With the Security Filter applied to the "Master" table, you can take advantage of "cascade filter" by using the filtered "Master" table to filter other tables.

For example, you might filter the "Company" table like (don't know you column names) :

IN([Business Unit], Master[Key])

Master[Key] provides a list of all row keys but due to the SEcurity Filter it will only be the filtered rows.

The maybe the "Site" table relates to the "Company" table.  You could filter the "Site" table  like so:

IN([Company], Company[Key])

and so on....

I hope this helps!! 

View solution in original post

5 REPLIES 5

First, to help simply filtering based on the current logged in user,  I recommend following this post on creating a CurrentUser slice.  It allows "clean" access to the current user details.

Once you have created the above, then you can apply a  Security Filter to the "Master" table like so:

In([Key], ANY(CurrentUser[Master List])

With the Security Filter applied to the "Master" table, you can take advantage of "cascade filter" by using the filtered "Master" table to filter other tables.

For example, you might filter the "Company" table like (don't know you column names) :

IN([Business Unit], Master[Key])

Master[Key] provides a list of all row keys but due to the SEcurity Filter it will only be the filtered rows.

The maybe the "Site" table relates to the "Company" table.  You could filter the "Site" table  like so:

IN([Company], Company[Key])

and so on....

I hope this helps!! 

Wow! Such an eloquent solution. I'm not all through my tables yet, but It's working like a charm. I created the Current User slice using my existing master and user tables. That worked well with the IN() expressions you provided. The cascading filter is the "bomb." Very powerful. 

Thanks for the insight, knowledge, and assistance!

I will work on it later tonight or tomorrow morning and let you know. Thanks!!

You might find this video helpful:

many company security filters.jpg

Yes. Great info. Thank you.

Top Labels in this Space