2 // System.Security.PermissionBuilder.cs
5 // Sebastien Pouliot <sebastien@ximian.com>
7 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System
.Security
.Permissions
;
31 namespace System
.Security
{
33 internal static class PermissionBuilder
{
34 private static object[] psNone
= new object [1] { PermissionState.None }
;
36 // can be used to create an empty or an unrestricted permission from any valid type
37 static public IPermission
Create (string fullname
, PermissionState state
)
40 throw new ArgumentNullException ("fullname");
42 SecurityElement se
= new SecurityElement ("IPermission");
43 se
.AddAttribute ("class", fullname
);
44 se
.AddAttribute ("version", "1");
45 if (state
== PermissionState
.Unrestricted
)
46 se
.AddAttribute ("Unrestricted", "true");
48 return CreatePermission (fullname
, se
);
51 static public IPermission
Create (SecurityElement se
)
54 throw new ArgumentNullException ("se");
56 string className
= se
.Attribute ("class");
57 if ((className
== null) || (className
.Length
== 0))
58 throw new ArgumentException ("class");
60 return CreatePermission (className
, se
);
63 // to use in case where the "class" attribute isn't a fully qualified class name
64 static public IPermission
Create (string fullname
, SecurityElement se
)
67 throw new ArgumentNullException ("fullname");
69 throw new ArgumentNullException ("se");
71 return CreatePermission (fullname
, se
);
74 static public IPermission
Create (Type type
)
76 // note: unification is handled in lower levels
77 // http://blogs.msdn.com/shawnfa/archive/2004/08/05/209320.aspx
78 return (IPermission
) Activator
.CreateInstance (type
, psNone
);
83 internal static IPermission
CreatePermission (string fullname
, SecurityElement se
)
85 Type classType
= Type
.GetType (fullname
);
86 if (classType
== null) {
87 string msg
= Locale
.GetText ("Can't create an instance of permission class {0}.");
88 throw new TypeLoadException (String
.Format (msg
, fullname
));
90 IPermission p
= Create (classType
);