CodeAccessPermission Class
Defines the underlying structure of all code access permissions.
Assembly: mscorlib (in mscorlib.dll)
Code access permissions use a stack walk to ensure that all callers of the code have been granted a permission. If a permission object is null, it is handled the same as a permission object with the state PermissionState.None.
The call stack is typically represented as growing down, so that methods higher in the call stack call methods lower in the call stack.
Inheritors of the CodeAccessPermission class must be granted full trust to function correctly as permissions extending the security infrastructure. To determine that the inheritors are fully trusted, CodeAccessPermission issues an InheritanceDemand for ControlEvidence = true and ControlPolicy = true.
For more information on inheritance demands, see Inheritance Demands.
Notes to Inheritors:
When you inherit from CodeAccessPermission, you must also implement the IUnrestrictedPermission interface.
The following CodeAccessPermission members must be overridden: Copy, Intersect, IsSubsetOf, ToXml, FromXml, and Union.
You must also define a constructor that takes a PermissionState as its only parameter.
You must apply the SerializableAttribute attribute to a class that inherits from CodeAccessPermission.
The following code example shows a permission derived from the CodeAccessPermission class.
//#define debug // This custom permission is intended only for the purposes of illustration. // The following code shows how to create a custom permission that inherits // from CodeAccessPermission. The code implements all required overrides. // A wildcard character ('*') is implemented for the Name property. using System; using System.Security; using System.Security.Permissions; using System.IO; using System.Security.Policy; using System.Collections; using System.Text; [assembly:System.Reflection.AssemblyKeyFile("Key.snk")] [assembly:System.Security.AllowPartiallyTrustedCallersAttribute()] namespace MyPermission { [Serializable()] sealed public class NameIdPermission : CodeAccessPermission, IUnrestrictedPermission { private String m_Name; private bool m_Unrestricted; public NameIdPermission(String name) { m_Name = name; } public NameIdPermission(PermissionState state) { if (state == PermissionState.None) { m_Name = ""; } else if (state == PermissionState.Unrestricted) { throw new ArgumentException("Unrestricted state is not allowed for identity permissions."); } else throw new ArgumentException("Invalid permission state."); } public String Name { set{m_Name = value;} get{ return m_Name;} } public override IPermission Copy() { string name = m_Name; return new NameIdPermission( name ); } public bool IsUnrestricted() { // Always false, unrestricted state is not allowed. return m_Unrestricted; } private bool VerifyType(IPermission target) { return (target is NameIdPermission); } public override bool IsSubsetOf(IPermission target) { #if(debug) Console.WriteLine ("************* Entering IsSubsetOf *********************"); #endif if (target == null) { Console.WriteLine ("IsSubsetOf: target == null"); return false; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif try { NameIdPermission operand = ( NameIdPermission)target; // The following check for unrestricted permission is only included as an example for // permissions that allow the unrestricted state. It is of no value for this permission. if (true == operand.m_Unrestricted) { return true; } else if (true == this.m_Unrestricted) { return false; } if (this.m_Name != null) { if (operand.m_Name == null) return false; if (this.m_Name == "") return true; } if (this.m_Name.Equals (operand.m_Name)) return true; else { // Check for wild card character '*'. int i = operand.m_Name.LastIndexOf ("*"); if (i > 0) { string prefix = operand.m_Name.Substring (0, i); if (this.m_Name.StartsWith (prefix)) { return true; } } } return false; } catch (InvalidCastException) { throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName)); } } public override IPermission Intersect(IPermission target) { Console.WriteLine ("************* Entering Intersect *********************"); if (target == null) { return null; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif if (!VerifyType(target)) { throw new ArgumentException (String.Format ("Argument is wrong type.", this.GetType ().FullName)); } NameIdPermission operand = ( NameIdPermission)target; if (operand.IsSubsetOf (this)) return operand.Copy (); else if (this.IsSubsetOf (operand)) return this.Copy (); else return null; } public override IPermission Union(IPermission target) { #if(debug) Console.WriteLine ("************* Entering Union *********************"); #endif if (target == null) { return this; } #if(debug) Console.WriteLine ("This is = " + (( NameIdPermission)this).Name); Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name); #endif if (!VerifyType(target)) { throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName)); } NameIdPermission operand = ( NameIdPermission)target; if (operand.IsSubsetOf (this)) return this.Copy (); else if (this.IsSubsetOf (operand)) return operand.Copy (); else return null; } public override void FromXml(SecurityElement e) { // The following code for unrestricted permission is only included as an example for // permissions that allow the unrestricted state. It is of no value for this permission. String elUnrestricted = e.Attribute("Unrestricted"); if (null != elUnrestricted) { m_Unrestricted = bool.Parse(elUnrestricted); return; } String elName = e.Attribute( "Name" ); m_Name = elName == null ? null : elName; } public override SecurityElement ToXml() { // Use the SecurityElement class to encode the permission to XML. SecurityElement esd = new SecurityElement("IPermission"); String name = typeof( NameIdPermission).AssemblyQualifiedName; esd.AddAttribute("class", name); esd.AddAttribute("version", "1.0"); // The following code for unrestricted permission is only included as an example for // permissions that allow the unrestricted state. It is of no value for this permission. if (m_Unrestricted) { esd.AddAttribute("Unrestricted", true.ToString()); } if (m_Name != null) esd.AddAttribute( "Name", m_Name ); return esd; } } }
-
SecurityPermission
for inheriting classes to provide evidence and view and modify policy. Associated enumerations: SecurityPermissionFlag.ControlEvidence, SecurityPermissionFlag.ControlPolicy.
System.Security.CodeAccessPermission
System.Configuration.ConfigurationPermission
System.Data.Common.DBDataPermission
System.Data.OracleClient.OraclePermission
System.Drawing.Printing.PrintingPermission
System.Messaging.MessageQueuePermission
System.Net.DnsPermission
System.Net.Mail.SmtpPermission
System.Net.NetworkInformation.NetworkInformationPermission
System.Net.PeerToPeer.Collaboration.PeerCollaborationPermission
System.Net.PeerToPeer.PnrpPermission
System.Net.SocketPermission
System.Net.WebPermission
System.Security.Permissions.DataProtectionPermission
System.Security.Permissions.EnvironmentPermission
System.Security.Permissions.FileDialogPermission
System.Security.Permissions.FileIOPermission
System.Security.Permissions.GacIdentityPermission
System.Security.Permissions.IsolatedStoragePermission
System.Security.Permissions.KeyContainerPermission
System.Security.Permissions.MediaPermission
System.Security.Permissions.PublisherIdentityPermission
System.Security.Permissions.ReflectionPermission
System.Security.Permissions.RegistryPermission
System.Security.Permissions.ResourcePermissionBase
System.Security.Permissions.SecurityPermission
System.Security.Permissions.SiteIdentityPermission
System.Security.Permissions.StorePermission
System.Security.Permissions.StrongNameIdentityPermission
System.Security.Permissions.UIPermission
System.Security.Permissions.UrlIdentityPermission
System.Security.Permissions.WebBrowserPermission
System.Security.Permissions.ZoneIdentityPermission
System.Transactions.DistributedTransactionPermission
System.Web.AspNetHostingPermission
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.