Exemplo n.º 1
0
        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);
        }