// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // // using System; using System.Diagnostics; using System.Diagnostics.Contracts; using System.Security.Permissions; using Microsoft.Win32; namespace System.Security { internal static class BuiltInPermissionSets { // // Raw PermissionSet XML - the built in permission sets are expressed in XML form since they contain // permissions from assemblies other than mscorlib. // private static readonly string s_everythingXml = @" "; private static readonly string s_executionXml = @" "; private static readonly string s_fullTrustXml = @""; private static readonly string s_internetXml = @" "; private static readonly string s_localIntranetXml = @" "; private static readonly string s_nothingXml = @""; private static readonly string s_skipVerificationXml = @" "; // // Built in permission set objects // private static NamedPermissionSet s_everything; private static NamedPermissionSet s_execution; private static NamedPermissionSet s_fullTrust; private static NamedPermissionSet s_internet; private static NamedPermissionSet s_localIntranet; private static NamedPermissionSet s_nothing; private static NamedPermissionSet s_skipVerification; // // Standard permission sets // internal static NamedPermissionSet Everything { get { return GetOrDeserializeExtendablePermissionSet(ref s_everything, s_everythingXml); } } internal static NamedPermissionSet Execution { get { return GetOrDeserializePermissionSet(ref s_execution, s_executionXml); } } internal static NamedPermissionSet FullTrust { get { return GetOrDeserializePermissionSet(ref s_fullTrust, s_fullTrustXml); } } internal static NamedPermissionSet Internet { get { return GetOrDeserializeExtendablePermissionSet(ref s_internet, s_internetXml); } } internal static NamedPermissionSet LocalIntranet { get { return GetOrDeserializeExtendablePermissionSet(ref s_localIntranet, s_localIntranetXml); } } internal static NamedPermissionSet Nothing { get { return GetOrDeserializePermissionSet(ref s_nothing, s_nothingXml); } } internal static NamedPermissionSet SkipVerification { get { return GetOrDeserializePermissionSet(ref s_skipVerification, s_skipVerificationXml); } } // // Utility methods to construct the permission set objects from the well known XML and any permission // set extensions if necessary // private static NamedPermissionSet GetOrDeserializeExtendablePermissionSet( ref NamedPermissionSet permissionSet, string permissionSetXml) { Contract.Requires(!String.IsNullOrEmpty(permissionSetXml)); return permissionSet.Copy() as NamedPermissionSet; } private static NamedPermissionSet GetOrDeserializePermissionSet(ref NamedPermissionSet permissionSet, string permissionSetXml) { Debug.Assert(!String.IsNullOrEmpty(permissionSetXml)); return permissionSet.Copy() as NamedPermissionSet; } } }