ResourcePermissionBase Class

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Allows control of code access security permissions.

Namespace:   System.Security.Permissions
Assembly:  System (in System.dll)


[SerializableAttribute]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, 
	ControlEvidence = true, ControlPolicy = true)]
public ref class ResourcePermissionBase abstract : CodeAccessPermission, 
	IUnrestrictedPermission

NameDescription
System_CAPS_protmethodResourcePermissionBase()

Initializes a new instance of the ResourcePermissionBase class.

System_CAPS_protmethodResourcePermissionBase(PermissionState)

Initializes a new instance of the ResourcePermissionBase class with the specified level of access to resources at creation.

NameDescription
System_CAPS_protpropertyPermissionAccessType

Gets or sets an enumeration value that describes the types of access that you are giving the resource.

System_CAPS_protpropertyTagNames

Gets or sets an array of strings that identify the resource you are protecting.

NameDescription
System_CAPS_protmethodAddPermissionAccess(ResourcePermissionBaseEntry^)

Adds a permission entry to the permission.

System_CAPS_pubmethodAssert()

Declares that the calling code can access the resource protected by a permission demand through the code that calls this method, even if callers higher in the stack have not been granted permission to access the resource. Using Assert can create security issues.(Inherited from CodeAccessPermission.)

System_CAPS_protmethodClear()

Clears the permission of the added permission entries.

System_CAPS_pubmethodCopy()

Creates and returns an identical copy of the current permission object.(Overrides CodeAccessPermission::Copy().)

System_CAPS_pubmethodDemand()

Forces a SecurityException at run time if all callers higher in the call stack have not been granted the permission specified by the current instance.(Inherited from CodeAccessPermission.)

System_CAPS_pubmethodDeny()

Obsolete. Prevents callers higher in the call stack from using the code that calls this method to access the resource specified by the current instance.(Inherited from CodeAccessPermission.)

System_CAPS_pubmethodEquals(Object^)

Determines whether the specified CodeAccessPermission object is equal to the current CodeAccessPermission.(Inherited from CodeAccessPermission.)

System_CAPS_protmethodFinalize()

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.(Inherited from Object.)

System_CAPS_pubmethodFromXml(SecurityElement^)

Reconstructs a security object with a specified state from an XML encoding.(Overrides CodeAccessPermission::FromXml(SecurityElement^).)

System_CAPS_pubmethodGetHashCode()

Gets a hash code for the CodeAccessPermission object that is suitable for use in hashing algorithms and data structures such as a hash table.(Inherited from CodeAccessPermission.)

System_CAPS_protmethodGetPermissionEntries()

Returns an array of the ResourcePermissionBaseEntry objects added to this permission.

System_CAPS_pubmethodGetType()

Gets the Type of the current instance.(Inherited from Object.)

System_CAPS_pubmethodIntersect(IPermission^)

Creates and returns a permission object that is the intersection of the current permission object and a target permission object.(Overrides CodeAccessPermission::Intersect(IPermission^).)

System_CAPS_pubmethodIsSubsetOf(IPermission^)

Determines whether the current permission object is a subset of the specified permission.(Overrides CodeAccessPermission::IsSubsetOf(IPermission^).)

System_CAPS_pubmethodIsUnrestricted()

Gets a value indicating whether the permission is unrestricted.

System_CAPS_protmethodMemberwiseClone()

Creates a shallow copy of the current Object.(Inherited from Object.)

System_CAPS_pubmethodPermitOnly()

Prevents callers higher in the call stack from using the code that calls this method to access all resources except for the resource specified by the current instance.(Inherited from CodeAccessPermission.)

System_CAPS_protmethodRemovePermissionAccess(ResourcePermissionBaseEntry^)

Removes a permission entry from the permission.

System_CAPS_pubmethodToString()

Creates and returns a string representation of the current permission object.(Inherited from CodeAccessPermission.)

System_CAPS_pubmethodToXml()

Creates and returns an XML encoding of the security object and its current state.(Overrides CodeAccessPermission::ToXml().)

System_CAPS_pubmethodUnion(IPermission^)

Creates a permission object that combines the current permission object and the target permission object.(Overrides CodeAccessPermission::Union(IPermission^).)

NameDescription
System_CAPS_pubfieldSystem_CAPS_staticAny

Specifies the character to be used to represent the any wildcard character.

System_CAPS_pubfieldSystem_CAPS_staticLocal

Specifies the character to be used to represent a local reference.

System_CAPS_noteNote

The ResourcePermissionBase class compares strings using ordinal sort rules and ignores the case of the strings being compared.

Notes to Inheritors:

When you inherit from ResourcePermissionBase, you must provide at least three constructors, set two properties, and provide a third property. The required constructors are: a default constructor, one that takes a PermissionState as a parameter, and as many as needed that take values for the properties. The properties that need to be set are PermissionAccessType and TagNames. The third property that is needed is one that returns the permission entries. For an example of an implementation of this class, see PerformanceCounterPermission. In PerformanceCounterPermission, the TagNames property is set privately to "Machine" and "Category", the PermissionAccessType property is privately set to the type of PerformanceCounterPermissionAccess, and the PermissionEntries property returns the permission entries.

The following example inherits from the ResourcePermissionBase class. 4 kinds of constructors are implemented. The example also provides an implementation of a class called MailslotPermissionEntry. The PermissionAccessType property is then privately set to the type of MailslotPermissionEntry. The TagNames property is set privately to "Name" and "Machine".

#using <System.dll>

using namespace System;
using namespace System::Security::Permissions;
using namespace System::Collections;

[Flags]

public enum class MailslotPermissionAccess
{
   None = 0,
   Send = 1 << 1,
   Receive = 1 << 2 | MailslotPermissionAccess::Send
};


[Serializable]
public ref class MailslotPermissionEntry
{
private:
   String^ name;
   String^ machineName;
   MailslotPermissionAccess permissionAccess;

internal:
   MailslotPermissionEntry( ResourcePermissionBaseEntry^ baseEntry )
   {
      this->permissionAccess = (MailslotPermissionAccess)baseEntry->PermissionAccess;
      this->name = baseEntry->PermissionAccessPath[ 0 ]->ToString();
      this->machineName = baseEntry->PermissionAccessPath[ 1 ]->ToString();
   }

   ResourcePermissionBaseEntry^ GetBaseEntry()
   {
      array<String^>^newStrings = {this->Name,this->MachineName};
      ResourcePermissionBaseEntry^ baseEntry = gcnew ResourcePermissionBaseEntry( (int)(this->PermissionAccess),newStrings );
      return baseEntry;
   }

public:
   MailslotPermissionEntry( MailslotPermissionAccess permissionAccess, String^ name, String^ machineName )
   {
      this->permissionAccess = permissionAccess;
      this->name = name;
      this->machineName = machineName;
   }

   property String^ Name 
   {
      String^ get()
      {
         return this->name;
      }
   }

   property String^ MachineName 
   {
      String^ get()
      {
         return this->machineName;
      }
   }

   property MailslotPermissionAccess PermissionAccess 
   {
      MailslotPermissionAccess get()
      {
         return this->permissionAccess;
      }
   }
};


[Serializable]
public ref class MailslotPermission: public ResourcePermissionBase
{
private:
   ArrayList^ innerCollection;
   void SetNames()
   {
      this->PermissionAccessType = MailslotPermissionAccess::typeid;
      array<String^>^newStrings = {"Name","Machine"};
      this->TagNames = newStrings;
   }


internal:
   void AddPermissionAccess( MailslotPermissionEntry^ entry )
   {
      ResourcePermissionBase::AddPermissionAccess( entry->GetBaseEntry() );
   }

   void Clear()
   {
      ResourcePermissionBase::Clear();
   }

   void RemovePermissionAccess( MailslotPermissionEntry^ entry )
   {
      ResourcePermissionBase::RemovePermissionAccess( entry->GetBaseEntry() );
   }


public:
   MailslotPermission()
   {
      SetNames();
   }

   MailslotPermission( PermissionState state )
      : ResourcePermissionBase( state )
   {
      SetNames();
   }

   MailslotPermission( MailslotPermissionAccess permissionAccess, String^ name, String^ machineName )
   {
      SetNames();
      this->AddPermissionAccess( gcnew MailslotPermissionEntry( permissionAccess,name,machineName ) );
   }

   MailslotPermission( array<MailslotPermissionEntry^>^permissionAccessEntries )
   {
      SetNames();
      if ( permissionAccessEntries == nullptr )
            throw gcnew ArgumentNullException( "permissionAccessEntries" );

      for ( int index = 0; index < permissionAccessEntries->Length; ++index )
         this->AddPermissionAccess( permissionAccessEntries[ index ] );
   }

   property ArrayList^ PermissionEntries 
   {
      ArrayList^ get()
      {
         if ( this->innerCollection == nullptr )
                  this->innerCollection = gcnew ArrayList;

         this->innerCollection->InsertRange( 0, safe_cast<ICollection^>(ResourcePermissionBase::GetPermissionEntries()) );
         return this->innerCollection;
      }
   }
};

SecurityPermission

for the right to control policy. Security action: InheritanceDemand. Associated enumeration: SecurityPermissionFlag::ControlPolicy.

SecurityPermission

for the right to control evidence. Security action: InheritanceDemand. Associated enumeration: SecurityPermissionFlag::ControlEvidence.

.NET Framework
Available since 1.1

Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top
Show: