private IPrincipal SetCurrentThreadPrincipal(ServiceSecurityContext securityContext, out bool isThreadPrincipalSet) { IPrincipal currentPrincipal = null; IPrincipal windowsPrincipal = null; if (this.principalPermissionMode == PrincipalPermissionMode.UseWindowsGroups) { windowsPrincipal = this.GetWindowsPrincipal(securityContext); } else if (this.principalPermissionMode == PrincipalPermissionMode.UseAspNetRoles) { windowsPrincipal = new RoleProviderPrincipal(this.roleProvider, securityContext); } else if (this.principalPermissionMode == PrincipalPermissionMode.Custom) { windowsPrincipal = GetCustomPrincipal(securityContext); } if (windowsPrincipal != null) { currentPrincipal = Thread.CurrentPrincipal; Thread.CurrentPrincipal = windowsPrincipal; isThreadPrincipalSet = true; return currentPrincipal; } isThreadPrincipalSet = false; return currentPrincipal; }
IPrincipal SetCurrentThreadPrincipal(ServiceSecurityContext securityContext, out bool isThreadPrincipalSet) { IPrincipal result = null; IPrincipal principal = null; ClaimsPrincipal claimsPrincipal = OperationContext.Current.ClaimsPrincipal; if (this.principalPermissionMode == PrincipalPermissionMode.UseWindowsGroups) { principal = ( claimsPrincipal is WindowsPrincipal ) ? claimsPrincipal : GetWindowsPrincipal( securityContext ); } else if (this.principalPermissionMode == PrincipalPermissionMode.UseAspNetRoles) { principal = new RoleProviderPrincipal(this.roleProvider, securityContext); } else if (this.principalPermissionMode == PrincipalPermissionMode.Custom) { principal = GetCustomPrincipal(securityContext); } else if (this.principalPermissionMode == PrincipalPermissionMode.Always) { principal = claimsPrincipal ?? new ClaimsPrincipal( new ClaimsIdentity() ); } if (principal != null) { result = Thread.CurrentPrincipal; Thread.CurrentPrincipal = principal; isThreadPrincipalSet = true; } else { isThreadPrincipalSet = false; } return result; }