2 // System.Security.Permissions.PermissionSetAttribute.cs
5 // Duncan Mak <duncan@ximian.com>
6 // Sebastien Pouliot <spouliot@videotron.ca>
8 // (C) 2002 Ximian, Inc. http://www.ximian.com
13 using System.Security.Policy;
18 namespace System.Security.Permissions {
20 [AttributeUsage (AttributeTargets.Assembly | AttributeTargets.Class |
21 AttributeTargets.Struct | AttributeTargets.Constructor |
22 AttributeTargets.Method, AllowMultiple=true, Inherited=false)]
24 public sealed class PermissionSetAttribute : CodeAccessSecurityAttribute {
29 private bool isUnicodeEncoded;
33 public PermissionSetAttribute (SecurityAction action)
51 public bool UnicodeEncoded
53 get { return isUnicodeEncoded; }
54 set { isUnicodeEncoded = value; }
64 public override IPermission CreatePermission ()
66 return null; // Not used, used for inheritance from SecurityAttribute
69 private PermissionSet CreateFromXml (string xml)
71 SecurityParser sp = new SecurityParser ();
73 SecurityElement se = sp.ToXml ();
75 string className = se.Attribute ("class");
76 if (className == null)
79 PermissionState state = PermissionState.None;
80 if (se.Attribute ("Unrestricted") == "true")
81 state = PermissionState.Unrestricted;
83 if (className.EndsWith ("NamedPermissionSet")) {
84 NamedPermissionSet nps = new NamedPermissionSet (se.Attribute ("Name"), state);
85 return (PermissionSet) nps;
87 else if (className.EndsWith ("PermissionSet")) {
88 PermissionSet ps = new PermissionSet (state);
94 public PermissionSet CreatePermissionSet ()
96 PermissionSet pset = null;
97 if (this.Unrestricted)
98 pset = new PermissionSet (PermissionState.Unrestricted);
100 pset = new PermissionSet (PermissionState.None);
102 return PolicyLevel.CreateAppDomainLevel ().GetNamedPermissionSet (name);
104 else if (file != null) {
105 Encoding e = ((isUnicodeEncoded) ? System.Text.Encoding.Unicode : System.Text.Encoding.ASCII);
106 using (StreamReader sr = new StreamReader (file, e)) {
107 pset = CreateFromXml (sr.ReadToEnd ());
110 else if (xml != null) {
111 pset = CreateFromXml (xml);