DynamicSource
Power Platform · Security

Onboarding users to Dataverse without the “I can't see anything” tickets

Most day-one access problems in model-driven apps trace back to a few design decisions made early. Here's how I set up roles, business units and teams so new users land ready to work.

The first week after go-live has a pattern. The app works in testing. Then real users sign in, and the tickets start: “The app isn't in my list.” “I can see the form but the save button is gone.” “Why can I see my manager's cases?”

Almost none of these are bugs. Each one traces back to a security design gap that testing with admin accounts never exposed. Dataverse security is powerful and predictable once you understand its layers. The work is in planning them before the first user arrives.

The short version: a user needs four things to work in a model-driven app. Access to the environment, a security role that grants the app, the right privileges on every table the app touches, and the right access level on the records they own or share. Miss any one and the user sees an empty or broken app.

1. Start with a role matrix, not the role editor

Before opening the security role editor, I build a simple matrix in a spreadsheet. Personas down the side, tables across the top, and in each cell the privileges (Create, Read, Write, Delete, Append, Append To, Assign, Share) and access level that persona needs.

Access levels are where most of the thinking happens. Dataverse gives you five:

Access levelWhat the user can reachTypical use
NoneNothingTables the persona never touches
UserRecords they own, or that are shared with them or their teamsFront-line staff working their own cases
Business UnitRecords in their business unitTeam leads within one department
Parent: Child Business UnitsTheir business unit and every unit below itRegional or division managers
OrganizationEvery record in the environmentReference and lookup tables, admins

The matrix becomes the spec. Business owners can review it without learning the role editor, and it doubles as the audit document later.

2. Build layered roles instead of one big role per persona

A single role per persona looks tidy until you have twelve of them that are 90% identical. Every new table then means twelve edits.

I use layers instead:

Dataverse combines privileges across all of a user's roles and grants the highest access level from any of them. That makes layering safe: adding a role can only widen access, never narrow it. It also means you can't use a role to take something away, so keep the base role minimal.

3. Put the business unit decision first

Business units drive record visibility, so choose the structure before you assign anyone. Keep it as flat as the organization allows. A deep hierarchy built to mirror an org chart becomes painful the first time someone changes departments.

That move is worth knowing about in advance. By default, when you change a user's business unit, Dataverse removes all of their security roles. The user signs in the next morning and has no access at all. If your environment uses record ownership across business units, the DoNotRemoveRolesOnChangeBusinessUnit environment setting can keep roles in place. Otherwise, put “reassign roles” on the transfer checklist.

4. Assign roles to Entra ID group teams, not individuals

Assigning roles user by user works for ten people and falls apart at fifty. Microsoft Entra ID group teams fix this. You create a Dataverse team linked to an Entra security group, assign roles to the team, and membership follows the group.

I also recommend a security group on the environment itself. It limits who can be added to the environment at all, which keeps licensed users from other departments from appearing in it.

5. Don't forget app access and column security

Two gaps catch almost every team at least once.

The app isn't in the list. A model-driven app is shared by associating it with security roles. If none of the user's roles is associated with the app, they won't see it, even if they have every table privilege. When I add a new function role, I add it to the app's roles in the same sitting.

A field is blank or read-only. Column security profiles control access to sensitive columns separately from table privileges. A user can have full Write on a table and still see a secured column as empty. Assign column security profiles to teams, just like roles, and include them in the role matrix.

6. Test as each persona before go-live

Testing with an admin or System Customizer account proves the app works. It proves nothing about access.

  1. Create one test user per persona, licensed and in the right business unit and Entra groups.
  2. Write a short script per persona: open the app, find a record, create one, edit one, attempt something they shouldn't be able to do.
  3. Check the negative cases as carefully as the positive ones. If a user can see a colleague's records, log it as a finding.
  4. Re-run the scripts after every solution import that touches roles, since a role in a managed solution can overwrite changes made in the target environment.

A day-one onboarding checklist

When onboarding is a checklist instead of a scramble, the first week after go-live is about how people use the app, which is the conversation you want to be having.