Export (0) Print
Expand All
0 out of 1 rated this helpful - Rate this topic

ResourcePermissionBase Class

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 abstract class ResourcePermissionBase : CodeAccessPermission, 
	IUnrestrictedPermission
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;        
using System.Security.Permissions;  
using System.Collections;

[Serializable()]
public class MailslotPermission: ResourcePermissionBase
{

	private ArrayList innerCollection;

	public MailslotPermission() 
	{
		SetNames();
	}                                                                

	public MailslotPermission(PermissionState state):base(state)
	{
		SetNames();
	}  

	public MailslotPermission(MailslotPermissionAccess permissionAccess, string name, string machineName)
	{
		SetNames();
		this.AddPermissionAccess(new MailslotPermissionEntry(permissionAccess, name, machineName));              
	}

	public MailslotPermission(MailslotPermissionEntry[] permissionAccessEntries) 
	{
		SetNames();
		if (permissionAccessEntries == null)
			throw new ArgumentNullException("permissionAccessEntries");

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

	public ArrayList PermissionEntries 
	{
		get 
		{
			if (this.innerCollection == null)                     
				this.innerCollection = new ArrayList();
			this.innerCollection.InsertRange(0,base.GetPermissionEntries()); 

			return this.innerCollection;                                                               
		}
	}

	internal void AddPermissionAccess(MailslotPermissionEntry entry) 
	{
		base.AddPermissionAccess(entry.GetBaseEntry());
	}

	internal new void Clear() 
	{
		base.Clear();
	}

	internal void RemovePermissionAccess(MailslotPermissionEntry entry) 
	{
		base.RemovePermissionAccess(entry.GetBaseEntry());
	}

	private void SetNames() 
	{
		this.PermissionAccessType = typeof(MailslotPermissionAccess);
		this.TagNames = new string[]{"Name","Machine"};
	}                                
}

[Flags]         
public enum MailslotPermissionAccess 
{
	None = 0,
	Send = 1 << 1,
	Receive = 1 << 2 | Send,
} 

[Serializable()]     
public class MailslotPermissionEntry 
{
	private string name;
	private string machineName;
	private MailslotPermissionAccess permissionAccess;

	public MailslotPermissionEntry(MailslotPermissionAccess permissionAccess, string name, string machineName) 
	{
		this.permissionAccess = permissionAccess;
		this.name = name;
		this.machineName = machineName;
	}  

	internal MailslotPermissionEntry(ResourcePermissionBaseEntry baseEntry) 
	{
		this.permissionAccess = (MailslotPermissionAccess)baseEntry.PermissionAccess;
		this.name = baseEntry.PermissionAccessPath[0]; 
		this.machineName = baseEntry.PermissionAccessPath[1]; 
	}

	public string Name 
	{
		get 
		{                
			return this.name;                
		}                        
	}

	public string MachineName 
	{
		get 
		{                
			return this.machineName;                
		}                        
	}

	public MailslotPermissionAccess PermissionAccess 
	{
		get 
		{
			return this.permissionAccess;
		}                        
	}      

	internal ResourcePermissionBaseEntry GetBaseEntry() 
	{
		ResourcePermissionBaseEntry baseEntry = new ResourcePermissionBaseEntry((int)this.PermissionAccess, new string[] {this.Name,this.MachineName});            
		return baseEntry;
	}

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

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.