2 // System.Security.Permissions.FileDialogPermission.cs
5 // Sebastien Pouliot <spouliot@motus.com>
7 // Copyright (C) 2003 Motus Technologies. http://www.motus.com
12 namespace System.Security.Permissions {
15 public sealed class FileDialogPermission : CodeAccessPermission, IUnrestrictedPermission {
17 private FileDialogPermissionAccess _access;
21 public FileDialogPermission (PermissionState state)
24 case PermissionState.None:
25 _access = FileDialogPermissionAccess.None;
27 case PermissionState.Unrestricted:
28 _access = FileDialogPermissionAccess.OpenSave;
31 throw new ArgumentException ("Invalid PermissionState", "state");
35 public FileDialogPermission (FileDialogPermissionAccess access)
42 public FileDialogPermissionAccess Access {
43 get { return _access; }
46 case FileDialogPermissionAccess.None:
47 case FileDialogPermissionAccess.Open:
48 case FileDialogPermissionAccess.Save:
49 case FileDialogPermissionAccess.OpenSave:
53 throw new ArgumentException ("Invalid FileDialogPermissionAccess", "access");
60 public override IPermission Copy ()
62 return new FileDialogPermission (_access);
65 public override void FromXml (SecurityElement esd)
68 throw new ArgumentNullException ("esd");
69 if (esd.Tag != "IPermission")
70 throw new ArgumentException ("not IPermission");
71 if (!(esd.Attributes ["class"] as string).StartsWith ("System.Security.Permissions.FileDialogPermission"))
72 throw new ArgumentException ("not FileDialogPermission");
73 if ((esd.Attributes ["version"] as string) != "1")
74 throw new ArgumentException ("wrong version");
76 switch (esd.Attributes ["Access"] as string) {
78 if ((esd.Attributes ["Unrestricted"] as string) == "true") {
79 _access = FileDialogPermissionAccess.OpenSave;
82 _access = FileDialogPermissionAccess.None;
85 _access = FileDialogPermissionAccess.Open;
88 _access = FileDialogPermissionAccess.Save;
93 public override IPermission Intersect (IPermission target)
97 if (! (target is FileDialogPermission))
98 throw new ArgumentException ("wrong type");
100 FileDialogPermission o = (FileDialogPermission) target;
101 if (IsUnrestricted ())
103 if (o.IsUnrestricted ())
106 FileDialogPermission ep = new FileDialogPermission (PermissionState.None);
107 // note: there are no more OpenSave cases (as they're Unrestricted)
108 if ((_access == FileDialogPermissionAccess.Open) && (o.Access == FileDialogPermissionAccess.Open))
109 ep.Access = FileDialogPermissionAccess.Open;
110 if ((_access == FileDialogPermissionAccess.Save) && (o.Access == FileDialogPermissionAccess.Save))
111 ep.Access = FileDialogPermissionAccess.Save;
112 return ((ep.Access == FileDialogPermissionAccess.None) ? null : ep);
115 public override bool IsSubsetOf (IPermission target)
120 if (! (target is FileDialogPermission))
121 throw new ArgumentException ("wrong type");
123 FileDialogPermission o = (FileDialogPermission) target;
124 if (IsUnrestricted ())
125 return o.IsUnrestricted ();
126 else if (o.IsUnrestricted ())
129 return ((_access | o.Access) == _access);
132 public bool IsUnrestricted ()
134 return (_access == FileDialogPermissionAccess.OpenSave);
137 // Same results as base class - so why is it overrided ?
138 public override string ToString ()
140 return base.ToString ();
143 public override SecurityElement ToXml ()
145 SecurityElement se = Element (this, 1);
147 case FileDialogPermissionAccess.Open:
148 se.AddAttribute ("Access", "Open");
150 case FileDialogPermissionAccess.Save:
151 se.AddAttribute ("Access", "Save");
153 case FileDialogPermissionAccess.OpenSave:
154 se.AddAttribute ("Unrestricted", "true");
160 public override IPermission Union (IPermission target)
164 if (! (target is FileDialogPermission))
165 throw new ArgumentException ("wrong type");
167 FileDialogPermission o = (FileDialogPermission) target;
168 if (IsUnrestricted () || o.IsUnrestricted ())
169 return new FileDialogPermission (PermissionState.Unrestricted);
171 FileDialogPermission ep = (FileDialogPermission) Copy ();
172 ep.Access = _access | o.Access;