2 // System.Security.CodeAccessPermission.cs
5 // Miguel de Icaza (miguel@ximian.com)
6 // Nick Drochak, ndrochak@gol.com
7 // Sebastien Pouliot (spouliot@motus.com)
9 // (C) Ximian, Inc. http://www.ximian.com
10 // Copyright (C) 2001 Nick Drochak, All Rights Reserved
11 // Portions (C) 2004 Motus Technologies Inc. (http://www.motus.com)
14 using System.Globalization;
15 using System.Security.Permissions;
18 namespace System.Security {
21 public abstract class CodeAccessPermission : IPermission, ISecurityEncodable, IStackWalk {
23 protected CodeAccessPermission () {}
25 // LAMESPEC: Documented as virtual
26 [MonoTODO("SecurityStackFrame not ready")]
29 // throw a SecurityException if Assertion is denied
30 new SecurityPermission (SecurityPermissionFlag.Assertion).Demand ();
31 // SecurityStackFrame.Current.Assert = this;
34 public abstract IPermission Copy ();
36 // LAMESPEC: Documented as virtual
37 [MonoTODO("MS contralize demands, but I think we should branch back into indivual permission classes.")]
40 IBuiltInPermission perm = (this as IBuiltInPermission);
42 return; // not sure about this :(
44 // TODO : Loop the stack
45 switch (perm.GetTokenIndex ()) {
46 case 0: // EnvironmentPermission
49 case 1: // FileDialogPermission
52 case 2: // FileIOPermission
55 case 3: // IsolatedStorageFilePermission
58 case 4: // ReflectionPermission
61 case 5: // RegistryPermission
64 case 6: // SecurityPermission
67 case 7: // UIPermission
70 case 8: // PrincipalPermission
73 case 9: // PublisherIdentityPermission
76 case 10: // SiteIdentityPermission
79 case 11: // StrongNameIdentityPermission
82 case 12: // UrlIdentityPermission
85 case 13: // ZoneIdentityPermission
89 string message = String.Format (Locale.GetText ("Unknown IBuiltInPermission #{0}"), perm.GetTokenIndex ());
90 throw new SecurityException (message);
94 // LAMESPEC: Documented as virtual
95 [MonoTODO("SecurityStackFrame not ready")]
98 // SecurityStackFrame.Current.Deny = this;
101 public abstract void FromXml (SecurityElement elem);
103 public abstract IPermission Intersect (IPermission target);
105 public abstract bool IsSubsetOf (IPermission target);
107 public override string ToString ()
109 SecurityElement elem = ToXml ();
110 return elem.ToString ();
113 public abstract SecurityElement ToXml ();
115 public virtual IPermission Union (IPermission other)
118 throw new System.NotSupportedException (); // other is not null.
122 // LAMESPEC: Documented as virtual
123 [MonoTODO("SecurityStackFrame not ready")]
124 public void PermitOnly ()
126 // SecurityStackFrame.Current.PermitOnly = this;
129 [MonoTODO("SecurityStackFrame not ready")]
130 public static void RevertAll ()
132 // SecurityStackFrame.Current.RevertAll ();
135 [MonoTODO("SecurityStackFrame not ready")]
136 public static void RevertAssert ()
138 // SecurityStackFrame.Current.RevertAssert ();
141 [MonoTODO("SecurityStackFrame not ready")]
142 public static void RevertDeny ()
144 // SecurityStackFrame.Current.RevertDeny ();
147 [MonoTODO("SecurityStackFrame not ready")]
148 public static void RevertPermitOnly ()
150 // SecurityStackFrame.Current.RevertPermitOnly ();
153 // snippet moved from FileIOPermission (nickd) to be reused in all derived classes
154 internal SecurityElement Element (object o, int version)
156 SecurityElement se = new SecurityElement ("IPermission");
157 Type type = this.GetType ();
158 StringBuilder asmName = new StringBuilder (type.Assembly.ToString ());
159 asmName.Replace ('\"', '\'');
160 se.AddAttribute ("class", type.FullName + ", " + asmName);
161 se.AddAttribute ("version", version.ToString ());