mscorlib(4.0.0.0) API with additions
SecurityPermission.cs
2 using System.Security.Util;
3 
5 {
8  [ComVisible(true)]
9  public sealed class SecurityPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
10  {
11  private SecurityPermissionFlag m_flags;
12 
13  private const string _strHeaderAssertion = "Assertion";
14 
15  private const string _strHeaderUnmanagedCode = "UnmanagedCode";
16 
17  private const string _strHeaderExecution = "Execution";
18 
19  private const string _strHeaderSkipVerification = "SkipVerification";
20 
21  private const string _strHeaderControlThread = "ControlThread";
22 
23  private const string _strHeaderControlEvidence = "ControlEvidence";
24 
25  private const string _strHeaderControlPolicy = "ControlPolicy";
26 
27  private const string _strHeaderSerializationFormatter = "SerializationFormatter";
28 
29  private const string _strHeaderControlDomainPolicy = "ControlDomainPolicy";
30 
31  private const string _strHeaderControlPrincipal = "ControlPrincipal";
32 
33  private const string _strHeaderControlAppDomain = "ControlAppDomain";
34 
39  {
40  get
41  {
42  return m_flags;
43  }
44  set
45  {
46  VerifyAccess(value);
47  m_flags = value;
48  }
49  }
50 
55  {
56  switch (state)
57  {
58  case PermissionState.Unrestricted:
59  SetUnrestricted(unrestricted: true);
60  break;
61  case PermissionState.None:
62  SetUnrestricted(unrestricted: false);
63  Reset();
64  break;
65  default:
66  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
67  }
68  }
69 
74  {
75  VerifyAccess(flag);
76  SetUnrestricted(unrestricted: false);
77  m_flags = flag;
78  }
79 
80  private void SetUnrestricted(bool unrestricted)
81  {
82  if (unrestricted)
83  {
84  m_flags = SecurityPermissionFlag.AllFlags;
85  }
86  }
87 
88  private void Reset()
89  {
90  m_flags = SecurityPermissionFlag.NoFlags;
91  }
92 
98  public override bool IsSubsetOf(IPermission target)
99  {
100  if (target == null)
101  {
102  return m_flags == SecurityPermissionFlag.NoFlags;
103  }
104  SecurityPermission securityPermission = target as SecurityPermission;
105  if (securityPermission != null)
106  {
107  return (m_flags & ~securityPermission.m_flags) == SecurityPermissionFlag.NoFlags;
108  }
109  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
110  }
111 
116  public override IPermission Union(IPermission target)
117  {
118  if (target == null)
119  {
120  return Copy();
121  }
122  if (!VerifyType(target))
123  {
124  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
125  }
126  SecurityPermission securityPermission = (SecurityPermission)target;
127  if (securityPermission.IsUnrestricted() || IsUnrestricted())
128  {
129  return new SecurityPermission(PermissionState.Unrestricted);
130  }
131  SecurityPermissionFlag flag = m_flags | securityPermission.m_flags;
132  return new SecurityPermission(flag);
133  }
134 
139  public override IPermission Intersect(IPermission target)
140  {
141  if (target == null)
142  {
143  return null;
144  }
145  if (!VerifyType(target))
146  {
147  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
148  }
149  SecurityPermission securityPermission = (SecurityPermission)target;
150  SecurityPermissionFlag securityPermissionFlag = SecurityPermissionFlag.NoFlags;
151  if (!securityPermission.IsUnrestricted())
152  {
153  securityPermissionFlag = ((!IsUnrestricted()) ? (m_flags & securityPermission.m_flags) : securityPermission.m_flags);
154  }
155  else
156  {
157  if (IsUnrestricted())
158  {
159  return new SecurityPermission(PermissionState.Unrestricted);
160  }
161  securityPermissionFlag = m_flags;
162  }
163  if (securityPermissionFlag == SecurityPermissionFlag.NoFlags)
164  {
165  return null;
166  }
167  return new SecurityPermission(securityPermissionFlag);
168  }
169 
172  public override IPermission Copy()
173  {
174  if (IsUnrestricted())
175  {
176  return new SecurityPermission(PermissionState.Unrestricted);
177  }
178  return new SecurityPermission(m_flags);
179  }
180 
184  public bool IsUnrestricted()
185  {
186  return m_flags == SecurityPermissionFlag.AllFlags;
187  }
188 
189  private void VerifyAccess(SecurityPermissionFlag type)
190  {
191  if ((type & ~(SecurityPermissionFlag.Assertion | SecurityPermissionFlag.UnmanagedCode | SecurityPermissionFlag.SkipVerification | SecurityPermissionFlag.Execution | SecurityPermissionFlag.ControlThread | SecurityPermissionFlag.ControlEvidence | SecurityPermissionFlag.ControlPolicy | SecurityPermissionFlag.SerializationFormatter | SecurityPermissionFlag.ControlDomainPolicy | SecurityPermissionFlag.ControlPrincipal | SecurityPermissionFlag.ControlAppDomain | SecurityPermissionFlag.RemotingConfiguration | SecurityPermissionFlag.Infrastructure | SecurityPermissionFlag.BindingRedirects)) != 0)
192  {
193  throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)type));
194  }
195  }
196 
199  public override SecurityElement ToXml()
200  {
201  SecurityElement securityElement = CodeAccessPermission.CreatePermissionElement(this, "System.Security.Permissions.SecurityPermission");
202  if (!IsUnrestricted())
203  {
204  securityElement.AddAttribute("Flags", XMLUtil.BitFieldEnumToString(typeof(SecurityPermissionFlag), m_flags));
205  }
206  else
207  {
208  securityElement.AddAttribute("Unrestricted", "true");
209  }
210  return securityElement;
211  }
212 
217  public override void FromXml(SecurityElement esd)
218  {
219  CodeAccessPermission.ValidateElement(esd, this);
220  if (XMLUtil.IsUnrestricted(esd))
221  {
222  m_flags = SecurityPermissionFlag.AllFlags;
223  return;
224  }
225  Reset();
226  SetUnrestricted(unrestricted: false);
227  string text = esd.Attribute("Flags");
228  if (text != null)
229  {
230  m_flags = (SecurityPermissionFlag)Enum.Parse(typeof(SecurityPermissionFlag), text);
231  }
232  }
233 
234  int IBuiltInPermission.GetTokenIndex()
235  {
236  return GetTokenIndex();
237  }
238 
239  internal static int GetTokenIndex()
240  {
241  return 6;
242  }
243  }
244 }
SecurityPermissionFlag Flags
Gets or sets the security permission flags.
Allows a permission to expose an unrestricted state.
Describes a set of security permissions applied to code. This class cannot be inherited.
SecurityPermission(SecurityPermissionFlag flag)
Initializes a new instance of the T:System.Security.Permissions.SecurityPermission class with the spe...
override SecurityElement ToXml()
Creates an XML encoding of the permission and its current state.
Definition: __Canon.cs:3
override IPermission Copy()
Creates and returns an identical copy of the current permission.
override bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
override void FromXml(SecurityElement esd)
Reconstructs a permission with a specified state from an XML encoding.
static object Parse(Type enumType, string value)
Converts the string representation of the name or numeric value of one or more enumerated constants t...
Definition: Enum.cs:298
Provides information about, and means to manipulate, the current environment and platform....
Definition: Environment.cs:21
Provides the base class for enumerations.
Definition: Enum.cs:14
Represents the XML object model for encoding security objects. This class cannot be inherited.
SecurityPermission(PermissionState state)
Initializes a new instance of the T:System.Security.Permissions.SecurityPermission class with either ...
Defines the underlying structure of all code access permissions.
Defines methods implemented by permission types.
Definition: IPermission.cs:7
The exception that is thrown when one of the arguments provided to a method is not valid.
override IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
override IPermission Union(IPermission target)
Creates a permission that is the union of the current permission and the specified permission.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
Specifies that the class can be serialized.
SecurityPermissionFlag
Specifies access flags for the security permission object.
bool IsUnrestricted()
Returns a value indicating whether the current permission is unrestricted.