summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Security/IPermission.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/Security/IPermission.cs')
-rw-r--r--src/mscorlib/src/System/Security/IPermission.cs84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/mscorlib/src/System/Security/IPermission.cs b/src/mscorlib/src/System/Security/IPermission.cs
new file mode 100644
index 0000000000..5477261fd7
--- /dev/null
+++ b/src/mscorlib/src/System/Security/IPermission.cs
@@ -0,0 +1,84 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+//
+//
+// Defines the interface that all Permission objects must support.
+//
+
+namespace System.Security
+{
+
+[System.Runtime.InteropServices.ComVisible(true)]
+ public interface IPermission : ISecurityEncodable
+ {
+ // NOTE: The constants that used to be defined here were moved to
+ // PermissionsEnum.cs due to CLS restrictions.
+
+ // The integrity of the security system depends on a means to
+ // copy objects so that references to sensitive objects are not
+ // exposed outside of the runtime. Thus, all permissions must
+ // implement Copy.
+ //
+ // Makes an exact copy of the Permission.
+ IPermission Copy();
+
+ /*
+ * Methods to support the Installation, Registration, others... PolicyEngine
+ */
+
+ // Policy decisions and runtime mechanisms (for example, Deny)
+ // require a means to retrieve shared state between two
+ // permissions. If there is no shared state between two
+ // instances, then the method should return null.
+ //
+ // Could think of the method as GetCommonState,
+ // but leave it as Intersect to avoid gratuitous name changes.
+ //
+ // Returns a new permission with the permission-defined intersection
+ // of the two permissions. The intersection is generally defined as
+ // privilege parameters that are included by both 'this' and 'target'.
+ // Returns null if 'target' is null or is of wrong type.
+ //
+ IPermission Intersect(IPermission target);
+
+ // The runtime policy manager also requires a means of combining the
+ // state contained within two permissions of the same type in a logical OR
+ // construct. (The Union of two permission of different type is not defined,
+ // except when one of the two is a CompoundPermission of internal type equal
+ // to the type of the other permission.)
+ //
+
+ IPermission Union(IPermission target);
+
+ // IsSubsetOf defines a standard mechanism for determining
+ // relative safety between two permission demands of the same type.
+ // If one demand x demands no more than some other demand y, then
+ // x.IsSubsetOf(y) should return true. In this case, if the
+ // demand for y is satisfied, then it is possible to assume that
+ // the demand for x would also be satisfied under the same
+ // circumstances. On the other hand, if x demands something that y
+ // does not, then x.IsSubsetOf(y) should return false; the fact
+ // that x is satisfied by the current security context does not
+ // also imply that the demand for y will also be satisfied.
+ //
+ // Returns true if 'this' Permission allows no more access than the
+ // argument.
+ //
+ bool IsSubsetOf(IPermission target);
+
+ // The Demand method is the fundamental part of the IPermission
+ // interface from a component developer's perspective. The
+ // permission represents the demand that the developer wants
+ // satisfied, and Demand is the means to invoke the demand.
+ // For each type of permission, the mechanism to verify the
+ // demand will be different. However, to the developer, all
+ // permissions invoke that mechanism through the Demand interface.
+ // Mark this method as requiring a security object on the caller's frame
+ // so the caller won't be inlined (which would mess up stack crawling).
+ [DynamicSecurityMethodAttribute()]
+ void Demand();
+
+ }
+}