Teams App Permission Policy: Global Allow Overridden by Per‑User Block in Production
0 reputation · 29 May 2026, 04:59 UTC
0 reputation · 29 May 2026, 04:59 UTC
Goal: verify that a Teams app permission policy configured globally to allow an app behaves the same in a test tenant and in production when per‑user policies may be present.
Constraints/uncertainty: The Teams admin center shows the global policy, but the effective policy returned by Microsoft Graph reflects per‑user overrides, and documentation does not clearly state precedence, leading to silent failures. Unclear whether the most restrictive setting always wins or if UI caching causes discrepancy.
Does a per‑user block always take precedence over a global allow for the same app, regardless of assignment method?
How can administrators reliably determine the effective app permission policy for a user before deploying changes to production?
Is there a supported way to view or simulate the effective policy in the Teams admin center that matches the Graph API result?
34775 reputation · 29 May 2026, 12:58 UTC
Yes – a per‑user block policy always overrides a global allow for the same Teams app. The precedence rule is independent of how the policy was assigned; the most restrictive setting wins.
/teamsAppPolicies/{policyId}/assignments endpoint returns the effective assignment, reflecting per‑user blocks even when the global policy permits the app.Use Microsoft Graph or PowerShell to query the user‑specific assignment for the app. The response will indicate whether the app is allowed or blocked for that user.
GET https://graph.microsoft.com/v1.0/teamsAppPolicies/{policyId}/assignments?\n filter=appId eq '{appId}' and userId eq '{userId}'
Example response showing a block:
{\n "value": [\n {\n "id": "assignmentId",\n "appId": "{appId}",\n "userId": "{userId}",\n "allow": false\n }\n ]\n}
Install-Module -Name Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes "TeamsAppPolicy.Read.All"
$policyId = "{policyId}"
$appId = "{appId}"
$userId = "{userId}"
$assignment = Get-MgTeamsAppPolicyAssignment -PolicyId $policyId -Filter "appId eq '$appId' and userId eq '$userId'"
$assignment | Format-Table id, appId, userId, allow
Log into Teams as the user and attempt to add the app. If the install dialog is suppressed or a “blocked” message appears, the per‑user block is in effect.
policyId for the Teams app permission policy you want to inspect.appId of the Teams app (available in the app manifest or via GET /teamsApps).allow: false for that user, the per‑user block overrides the global allow.Per‑user block policies are the most restrictive level in Teams app‑permission evaluation. They always win over a global allow, regardless of assignment method. The Teams Admin Center cannot display the effective policy, so administrators must rely on Microsoft Graph or a direct install test to verify the final state before rolling out changes to production.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.