13
13
/// </summary>
14
14
internal class RscConfigurationSynthesizer
15
15
{
16
- internal const string MicrosoftCreatedPermissionGrantPolicyForChatRscPreApproval = "ManagePermissionGrantsForOwnedResource.microsoft-pre-approval-apps-for-chat " ;
16
+ internal const string GroupConsentSettingsTemplateId = "dffd5d46-495d-40a9-8e21-954ff55e198a " ;
17
17
18
- internal const string MicrosoftCreatedPermissionGrantPolicyForTeamRscPreApproval = "ManagePermissionGrantsForOwnedResource.microsoft-pre-approval-apps-for-group " ;
18
+ internal const string MicrosoftCreatedPermissionGrantPolicyEnabledForPreapprovedAppsForChats = "ManagePermissionGrantsForOwnedResource.microsoft-pre-approval-apps-for-chat " ;
19
19
20
- internal const string MicrosoftCreatedPermissionGrantPolicyForUserConsentLegacy = "ManagePermissionGrantsForSelf .microsoft-user-default-legacy " ;
20
+ internal const string MicrosoftCreatedPermissionGrantPolicyEnabledForAllAppsForChats = "ManagePermissionGrantsForOwnedResource .microsoft-all-application-permissions-for-chat " ;
21
21
22
- internal const string GroupConsentSettingsTemplateId = "dffd5d46-495d-40a9-8e21-954ff55e198a " ;
22
+ internal const string MicrosoftCreatedPermissionGrantPolicyManagedByMicrosoftForChats = "ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat " ;
23
23
24
- internal const string EnableGroupSpecificConsentKey = "EnableGroupSpecificConsent " ;
24
+ internal const string MicrosoftCreatedPermissionGrantPolicyEnabledForPreapprovedAppsForTeams = "ManagePermissionGrantsForOwnedResource.microsoft-pre-approval-apps-for-team " ;
25
25
26
- internal const string ConstrainGroupSpecificConsentToMembersOfGroupIdKey = "ConstrainGroupSpecificConsentToMembersOfGroupId" ;
26
+ internal const string MicrosoftCreatedPermissionGrantPolicyEnabledForAllAppsForTeams = "ManagePermissionGrantsForOwnedResource.microsoft-all-application-permissions-for-team" ;
27
+
28
+ internal const string MicrosoftCreatedPermissionGrantPolicyManagedByMicrosoftForTeams = "ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team" ;
27
29
28
30
/// <summary>
29
31
/// Initializes a new instance of the <see cref="RscConfigurationSynthesizer"/> class.
@@ -82,33 +84,54 @@ internal MicrosoftGraphRscConfiguration ConvertToChatRscConfiguration(
82
84
83
85
if ( teamsAppSettings . IsChatResourceSpecificConsentEnabled == true )
84
86
{
85
- if ( assignedPermissionGrantPoliciesApplicableToChatScope . Any ( ) )
86
- {
87
- this . LogVerbose (
88
- "Chat RSC is enabled in Teams App Settings and chat scoped permission grant policies are enabled. Not a supported scenario." ,
89
- eventListener ) ;
90
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
91
- }
92
- else
93
- {
94
- this . LogVerbose ( "Chat RSC is enabled in Teams App Settings." , eventListener ) ;
95
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForAllApps ;
96
- }
87
+ this . LogVerbose ( "Chat RSC is enabled in Teams App Settings." , eventListener ) ;
88
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForAllApps ;
97
89
}
98
90
else if ( assignedPermissionGrantPoliciesApplicableToChatScope . Any ( ) )
99
91
{
100
- if ( assignedPermissionGrantPoliciesApplicableToChatScope . Any ( pgp => ! string . Equals (
101
- pgp . ManagePermissionGrantsForOwnedResourcePrefixedId ,
102
- RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyForChatRscPreApproval ,
103
- StringComparison . OrdinalIgnoreCase ) ) )
92
+ int interestingPermissionGrantPolicyCount = assignedPermissionGrantPoliciesApplicableToChatScope . Count ( ) ;
93
+
94
+ if ( interestingPermissionGrantPolicyCount > 1 )
104
95
{
105
- this . LogVerbose ( "Unknown chat scoped permission grant policies are enabled. Not a supported scenario." , eventListener ) ;
96
+ this . LogVerbose ( "Multiple chat scoped permission grant policies are enabled. Not a supported scenario." , eventListener ) ;
106
97
microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
107
98
}
99
+ else if ( interestingPermissionGrantPolicyCount == 0 )
100
+ {
101
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . DisabledForAllApps ;
102
+ }
108
103
else
109
104
{
110
- this . LogVerbose ( "Authorization policy contains permission grant policy for chat RSC preapprovals." , eventListener ) ;
111
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForPreApprovedAppsOnly ;
105
+ MGTeamsInternalPermissionGrantPolicy interestingPermissionGrantPolicy =
106
+ assignedPermissionGrantPoliciesApplicableToChatScope . Single ( ) ;
107
+
108
+ if ( string . Equals (
109
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
110
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyEnabledForAllAppsForChats ,
111
+ StringComparison . OrdinalIgnoreCase ) )
112
+ {
113
+ this . LogVerbose ( "Authorization policy contains permission grant policy for all chat RSC applications." , eventListener ) ;
114
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForAllApps ;
115
+ }
116
+ else if ( string . Equals (
117
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
118
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyEnabledForPreapprovedAppsForChats ,
119
+ StringComparison . OrdinalIgnoreCase ) )
120
+ {
121
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForPreApprovedAppsOnly ;
122
+ }
123
+ else if ( string . Equals (
124
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
125
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyManagedByMicrosoftForChats ,
126
+ StringComparison . OrdinalIgnoreCase ) )
127
+ {
128
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . ManagedByMicrosoft ;
129
+ }
130
+ else
131
+ {
132
+ this . LogVerbose ( "Unknown chat scoped permission grant policies are enabled. Not a supported scenario." , eventListener ) ;
133
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
134
+ }
112
135
}
113
136
}
114
137
else
@@ -124,12 +147,10 @@ internal MicrosoftGraphRscConfiguration ConvertToChatRscConfiguration(
124
147
/// Convert the given tenant settings to Team RSC configuration.
125
148
/// </summary>
126
149
/// <param name="permissionGrantPolicyCollection">Permission grant policy collection.</param>
127
- /// <param name="tenantConsentSettingCollection">Tenant consent setting collection.</param>
128
150
/// <param name="authorizationPolicy">Authorization policy.</param>
129
151
/// <returns>Rsc configuration.</returns>
130
152
internal IMicrosoftGraphRscConfiguration ConvertToTeamRscConfiguration (
131
153
MGTeamsInternalPermissionGrantPolicyCollection permissionGrantPolicyCollection ,
132
- MGTeamsInternalTenantConsentSettingsCollection tenantConsentSettingCollection ,
133
154
MGTeamsInternalAuthorizationPolicy authorizationPolicy ,
134
155
Runtime . IEventListener eventListener )
135
156
{
@@ -140,13 +161,6 @@ internal IMicrosoftGraphRscConfiguration ConvertToTeamRscConfiguration(
140
161
"Permission grant policies were not found." ) ;
141
162
}
142
163
143
- if ( tenantConsentSettingCollection ? . Value == null )
144
- {
145
- throw new MGTeamsInternalException (
146
- MGTeamsInternalErrorType . ResourceNotFound ,
147
- "Tenant consent settings were not found." ) ;
148
- }
149
-
150
164
if ( authorizationPolicy == null )
151
165
{
152
166
throw new MGTeamsInternalException (
@@ -161,58 +175,53 @@ internal IMicrosoftGraphRscConfiguration ConvertToTeamRscConfiguration(
161
175
State = MicrosoftGraphRscConfigurationState . Custom
162
176
} ;
163
177
164
- ( string isGroupConsentSettingEnabled , string groupConsentConstrainedToGroupId ) projectedGroupConsentSettings = this . GetProjectedGroupConsentSettings (
165
- tenantConsentSettingCollection ,
166
- authorizationPolicy ,
167
- eventListener ) ;
168
-
169
178
IEnumerable < MGTeamsInternalPermissionGrantPolicy > assignedPermissionGrantPoliciesApplicableToGroupScope =
170
179
this . GetAssignedPermissionGrantPoliciesApplicableToGivenScopeType (
171
180
permissionGrantPolicyCollection ,
172
181
authorizationPolicy ,
173
182
MicrosoftGraphRscConfigurationScopeType . Team ) ;
174
183
175
- if ( string . Equals ( projectedGroupConsentSettings . isGroupConsentSettingEnabled , true . ToString ( ) , StringComparison . OrdinalIgnoreCase ) )
184
+ int interestingPermissionGrantPolicyCount = assignedPermissionGrantPoliciesApplicableToGroupScope . Count ( ) ;
185
+
186
+ if ( interestingPermissionGrantPolicyCount > 1 )
176
187
{
177
- if ( assignedPermissionGrantPoliciesApplicableToGroupScope . Any ( ) )
178
- {
179
- this . LogVerbose (
180
- "Projected group consent setting value is enabled and group scoped permission grant policies are enabled. Not a supported scenario." ,
181
- eventListener ) ;
182
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
183
- }
184
- else if ( string . IsNullOrWhiteSpace ( projectedGroupConsentSettings . groupConsentConstrainedToGroupId ) )
188
+ this . LogVerbose ( "Multiple group scoped permission grant policies are enabled. Not a supported scenario." , eventListener ) ;
189
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
190
+ }
191
+ else if ( interestingPermissionGrantPolicyCount == 0 )
192
+ {
193
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . DisabledForAllApps ;
194
+ }
195
+ else
196
+ {
197
+ MGTeamsInternalPermissionGrantPolicy interestingPermissionGrantPolicy = assignedPermissionGrantPoliciesApplicableToGroupScope . Single ( ) ;
198
+ if ( string . Equals (
199
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
200
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyEnabledForAllAppsForTeams ,
201
+ StringComparison . OrdinalIgnoreCase ) )
185
202
{
186
- this . LogVerbose ( "Projected group consent setting value is enabled. No constraints on users able to grant consent." , eventListener ) ;
187
203
microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForAllApps ;
188
204
}
189
- else
205
+ else if ( string . Equals (
206
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
207
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyEnabledForPreapprovedAppsForTeams ,
208
+ StringComparison . OrdinalIgnoreCase ) )
190
209
{
191
- this . LogVerbose ( $ "Projected group consent setting value is enabled. Consent is constrained to users belonging to group '{ projectedGroupConsentSettings . groupConsentConstrainedToGroupId } '.", eventListener ) ;
192
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForSelectedGroupOfUsers ;
210
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForPreApprovedAppsOnly ;
193
211
}
194
- }
195
- else if ( assignedPermissionGrantPoliciesApplicableToGroupScope . Any ( ) )
196
- {
197
- if ( assignedPermissionGrantPoliciesApplicableToGroupScope . Any ( pgp => ! string . Equals (
198
- pgp . ManagePermissionGrantsForOwnedResourcePrefixedId ,
199
- RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyForTeamRscPreApproval ,
200
- StringComparison . OrdinalIgnoreCase ) ) )
212
+ else if ( string . Equals (
213
+ interestingPermissionGrantPolicy . ManagePermissionGrantsForOwnedResourcePrefixedId ,
214
+ RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyManagedByMicrosoftForTeams ,
215
+ StringComparison . OrdinalIgnoreCase ) )
201
216
{
202
- this . LogVerbose ( "Unknown group scoped permission grant policies are enabled. Not a supported scenario." , eventListener ) ;
203
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
217
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . ManagedByMicrosoft ;
204
218
}
205
219
else
206
220
{
207
- this . LogVerbose ( "Authorization policy contains permission grant policy for team RSC preapprovals ." , eventListener ) ;
208
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . EnabledForPreApprovedAppsOnly ;
221
+ this . LogVerbose ( "Unknown group scoped permission grant policies are enabled. Not a supported scenario ." , eventListener ) ;
222
+ microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . Custom ;
209
223
}
210
224
}
211
- else
212
- {
213
- this . LogVerbose ( "Team RSC is disabled." , eventListener ) ;
214
- microsoftGraphRscConfiguration . State = MicrosoftGraphRscConfigurationState . DisabledForAllApps ;
215
- }
216
225
217
226
return microsoftGraphRscConfiguration ;
218
227
}
@@ -233,7 +242,7 @@ internal IEnumerable<MGTeamsInternalPermissionGrantPolicy> GetAssignedPermission
233
242
switch ( rscConfigurationScopeType )
234
243
{
235
244
case MicrosoftGraphRscConfigurationScopeType . Team :
236
- identitySpecificScopeType = "group " ;
245
+ identitySpecificScopeType = "team " ;
237
246
break ;
238
247
239
248
case MicrosoftGraphRscConfigurationScopeType . Chat :
@@ -262,51 +271,6 @@ internal IEnumerable<MGTeamsInternalPermissionGrantPolicy> GetAssignedPermission
262
271
return assignedPermissionGrantPoliciesApplicableToGivenScope ;
263
272
}
264
273
265
- /// <summary>
266
- /// Get the projected value of group consent settings. i.e.
267
- /// 1. Whether group consent is enabled. This is derived from group consent and user consent settings.
268
- /// 2. Specific groups that group consent is restricted to.
269
- /// </summary>
270
- /// <param name="tenantConsentSettingCollection">Tenant consent setting collection.</param>
271
- /// <param name="authorizationPolicy">The authorization policy.</param>
272
- /// <param name="eventListener">The event listener.</param>
273
- /// <returns>Projected value of group consent settings.</returns>
274
- private ( string isGroupConsentSettingEnabled , string groupConsentConstrainedToGroupId ) GetProjectedGroupConsentSettings (
275
- MGTeamsInternalTenantConsentSettingsCollection tenantConsentSettingCollection ,
276
- MGTeamsInternalAuthorizationPolicy authorizationPolicy ,
277
- IEventListener eventListener )
278
- {
279
- MGTeamsInternalTenantConsentSettings groupConsentSettings = tenantConsentSettingCollection . Value ? . FirstOrDefault (
280
- v => string . Equals ( v . TemplateId , RscConfigurationSynthesizer . GroupConsentSettingsTemplateId , StringComparison . OrdinalIgnoreCase ) ) ;
281
-
282
- if ( groupConsentSettings == null )
283
- {
284
- this . LogVerbose ( "Group Consent settings were not found." , eventListener ) ;
285
-
286
- if ( authorizationPolicy
287
- ? . DefaultUserRolePermissions
288
- ? . PermissionGrantPoliciesAssigned
289
- ? . Contains (
290
- RscConfigurationSynthesizer . MicrosoftCreatedPermissionGrantPolicyForUserConsentLegacy , StringComparer . OrdinalIgnoreCase ) == true )
291
- {
292
- this . LogVerbose ( "Legacy policy for user consent was found in default user role permissions. Projecting group consent to be true." , eventListener ) ;
293
- return ( isGroupConsentSettingEnabled : true . ToString ( ) , groupConsentConstrainedToGroupId : null ) ;
294
- }
295
-
296
- return ( isGroupConsentSettingEnabled : false . ToString ( ) , groupConsentConstrainedToGroupId : null ) ;
297
- }
298
-
299
- MGTeamsInternalTenantConsentSettingValue isGroupConsentEnabledSettingValue = groupConsentSettings . Values ? . SingleOrDefault (
300
- v => string . Equals ( v . Name , RscConfigurationSynthesizer . EnableGroupSpecificConsentKey , StringComparison . OrdinalIgnoreCase ) ) ;
301
-
302
- MGTeamsInternalTenantConsentSettingValue groupConsentConstrainedToGroupId = groupConsentSettings . Values ? . SingleOrDefault (
303
- v => string . Equals ( v . Name , RscConfigurationSynthesizer . ConstrainGroupSpecificConsentToMembersOfGroupIdKey , StringComparison . OrdinalIgnoreCase ) ) ;
304
-
305
- return
306
- ( isGroupConsentSettingEnabled : isGroupConsentEnabledSettingValue ? . Value ,
307
- groupConsentConstrainedToGroupId : groupConsentConstrainedToGroupId ? . Value ) ;
308
- }
309
-
310
274
/// <summary>
311
275
/// Log verbose.
312
276
/// </summary>
0 commit comments