mscorlib(4.0.0.0) API with additions
FileDialogPermission.cs
2 using System.Security.Util;
3 
5 {
8  [ComVisible(true)]
9  public sealed class FileDialogPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission
10  {
11  private FileDialogPermissionAccess access;
12 
17  {
18  get
19  {
20  return access;
21  }
22  set
23  {
24  VerifyAccess(value);
25  access = value;
26  }
27  }
28 
33  {
34  switch (state)
35  {
36  case PermissionState.Unrestricted:
37  SetUnrestricted(unrestricted: true);
38  break;
39  case PermissionState.None:
40  SetUnrestricted(unrestricted: false);
41  Reset();
42  break;
43  default:
44  throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
45  }
46  }
47 
52  {
53  VerifyAccess(access);
54  this.access = access;
55  }
56 
59  public override IPermission Copy()
60  {
61  return new FileDialogPermission(access);
62  }
63 
68  public override void FromXml(SecurityElement esd)
69  {
70  CodeAccessPermission.ValidateElement(esd, this);
71  if (XMLUtil.IsUnrestricted(esd))
72  {
73  SetUnrestricted(unrestricted: true);
74  return;
75  }
76  access = FileDialogPermissionAccess.None;
77  string text = esd.Attribute("Access");
78  if (text != null)
79  {
81  }
82  }
83 
84  int IBuiltInPermission.GetTokenIndex()
85  {
86  return GetTokenIndex();
87  }
88 
89  internal static int GetTokenIndex()
90  {
91  return 1;
92  }
93 
98  public override IPermission Intersect(IPermission target)
99  {
100  if (target == null)
101  {
102  return null;
103  }
104  if (!VerifyType(target))
105  {
106  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
107  }
108  FileDialogPermission fileDialogPermission = (FileDialogPermission)target;
109  FileDialogPermissionAccess fileDialogPermissionAccess = access & fileDialogPermission.Access;
110  if (fileDialogPermissionAccess == FileDialogPermissionAccess.None)
111  {
112  return null;
113  }
114  return new FileDialogPermission(fileDialogPermissionAccess);
115  }
116 
122  public override bool IsSubsetOf(IPermission target)
123  {
124  if (target == null)
125  {
126  return access == FileDialogPermissionAccess.None;
127  }
128  try
129  {
130  FileDialogPermission fileDialogPermission = (FileDialogPermission)target;
131  if (fileDialogPermission.IsUnrestricted())
132  {
133  return true;
134  }
135  if (IsUnrestricted())
136  {
137  return false;
138  }
139  int num = (int)(access & FileDialogPermissionAccess.Open);
140  int num2 = (int)(access & FileDialogPermissionAccess.Save);
141  int num3 = (int)(fileDialogPermission.Access & FileDialogPermissionAccess.Open);
142  int num4 = (int)(fileDialogPermission.Access & FileDialogPermissionAccess.Save);
143  return num <= num3 && num2 <= num4;
144  }
145  catch (InvalidCastException)
146  {
147  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
148  }
149  }
150 
154  public bool IsUnrestricted()
155  {
156  return access == FileDialogPermissionAccess.OpenSave;
157  }
158 
159  private void Reset()
160  {
161  access = FileDialogPermissionAccess.None;
162  }
163 
164  private void SetUnrestricted(bool unrestricted)
165  {
166  if (unrestricted)
167  {
168  access = FileDialogPermissionAccess.OpenSave;
169  }
170  }
171 
174  public override SecurityElement ToXml()
175  {
176  SecurityElement securityElement = CodeAccessPermission.CreatePermissionElement(this, "System.Security.Permissions.FileDialogPermission");
177  if (!IsUnrestricted())
178  {
179  if (access != 0)
180  {
181  securityElement.AddAttribute("Access", Enum.GetName(typeof(FileDialogPermissionAccess), access));
182  }
183  }
184  else
185  {
186  securityElement.AddAttribute("Unrestricted", "true");
187  }
188  return securityElement;
189  }
190 
195  public override IPermission Union(IPermission target)
196  {
197  if (target == null)
198  {
199  return Copy();
200  }
201  if (!VerifyType(target))
202  {
203  throw new ArgumentException(Environment.GetResourceString("Argument_WrongType", GetType().FullName));
204  }
205  FileDialogPermission fileDialogPermission = (FileDialogPermission)target;
206  return new FileDialogPermission(access | fileDialogPermission.Access);
207  }
208 
209  private static void VerifyAccess(FileDialogPermissionAccess access)
210  {
211  if ((access & ~(FileDialogPermissionAccess.Open | FileDialogPermissionAccess.Save)) != 0)
212  {
213  throw new ArgumentException(Environment.GetResourceString("Arg_EnumIllegalVal", (int)access));
214  }
215  }
216  }
217 }
static string GetName(Type enumType, object value)
Retrieves the name of the constant in the specified enumeration that has the specified value.
Definition: Enum.cs:482
Allows a permission to expose an unrestricted state.
override IPermission Copy()
Creates and returns an identical copy of the current permission.
FileDialogPermission(FileDialogPermissionAccess access)
Initializes a new instance of the T:System.Security.Permissions.FileDialogPermission class with the s...
Definition: __Canon.cs:3
The exception that is thrown for invalid casting or explicit conversion.
override SecurityElement ToXml()
Creates an XML encoding of the permission and its current state.
override IPermission Union(IPermission target)
Creates a permission that is the union of the current permission and the specified permission.
FileDialogPermissionAccess
Specifies the type of access to files allowed through the File dialog boxes.
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
bool IsUnrestricted()
Returns a value indicating whether the current permission is unrestricted.
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.
Defines the underlying structure of all code access permissions.
FileDialogPermissionAccess Access
Gets or sets the permitted access to files.
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.
PermissionState
Specifies whether a permission should have all or no access to resources at creation.
override void FromXml(SecurityElement esd)
Reconstructs a permission with a specified state from an XML encoding.
void AddAttribute(string name, string value)
Adds a name/value attribute to an XML element.
FileDialogPermission(PermissionState state)
Initializes a new instance of the T:System.Security.Permissions.FileDialogPermission class with eithe...
Specifies that the class can be serialized.
override bool IsSubsetOf(IPermission target)
Determines whether the current permission is a subset of the specified permission.
override IPermission Intersect(IPermission target)
Creates and returns a permission that is the intersection of the current permission and the specified...
Controls the ability to access files or folders through a File dialog box. This class cannot be inher...