本文整理汇总了C#中System.Security.Policy.FileCodeGroup类的典型用法代码示例。如果您正苦于以下问题:C# FileCodeGroup类的具体用法?C# FileCodeGroup怎么用?C# FileCodeGroup使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
FileCodeGroup类属于System.Security.Policy命名空间,在下文中一共展示了FileCodeGroup类的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Main
//引入命名空间
using System;
using System.Security;
using System.Security.Policy;
using System.Security.Permissions;
using System.Reflection;
class Members
{
[STAThread]
static void Main(string[] args)
{
FileCodeGroup fileCodeGroup = constructDefaultGroup();
// Create a deep copy of the FileCodeGroup.
FileCodeGroup copyCodeGroup = (FileCodeGroup)fileCodeGroup.Copy();
CompareTwoCodeGroups(fileCodeGroup, copyCodeGroup);
addPolicy(ref fileCodeGroup);
addXmlMember(ref fileCodeGroup);
updateMembershipCondition(ref fileCodeGroup);
addChildCodeGroup(ref fileCodeGroup);
Console.Write("Comparing the resolved code group ");
Console.WriteLine("with the initial code group.");
FileCodeGroup resolvedCodeGroup =
ResolveGroupToEvidence(fileCodeGroup);
if (CompareTwoCodeGroups(fileCodeGroup, resolvedCodeGroup))
{
PrintCodeGroup(resolvedCodeGroup);
}
else
{
PrintCodeGroup(fileCodeGroup);
}
Console.WriteLine("This sample completed successfully; " +
"press Enter to exit.");
Console.ReadLine();
}
// Construct a new FileCodeGroup with Read, Write, Append
// and PathDiscovery access.
private static FileCodeGroup constructDefaultGroup()
{
// Construct a new file code group that has complete access to
// files in the specified path.
FileCodeGroup fileCodeGroup =
new FileCodeGroup(
new AllMembershipCondition(),
FileIOPermissionAccess.AllAccess);
// Set the name of the file code group.
fileCodeGroup.Name = "TempCodeGroup";
// Set the description of the file code group.
fileCodeGroup.Description = "Temp folder permissions group";
// Retrieve the string representation of the fileCodeGroup’s
// attributes. FileCodeGroup does not use AttributeString, so the
// value should be null.
if (fileCodeGroup.AttributeString != null)
{
throw new NullReferenceException(
"The AttributeString property should be null.");
}
return fileCodeGroup;
}
// Add file permission to restrict write access to all files on the
// local machine.
private static void addPolicy(ref FileCodeGroup fileCodeGroup)
{
// Set the PolicyStatement property to a policy with read access to
// the root directory of drive C.
FileIOPermission rootFilePermissions =
new FileIOPermission(PermissionState.None);
rootFilePermissions.AllLocalFiles = FileIOPermissionAccess.Read;
rootFilePermissions.SetPathList(FileIOPermissionAccess.Read,"C:\\");
NamedPermissionSet namedPermissions =
new NamedPermissionSet("RootPermissions");
namedPermissions.AddPermission(rootFilePermissions);
fileCodeGroup.PolicyStatement =
new PolicyStatement(namedPermissions);
}
// Set the membership condition of the specified FileCodeGroup
// to the Intranet zone.
private static void updateMembershipCondition(
ref FileCodeGroup fileCodeGroup)
{
ZoneMembershipCondition zoneCondition =
new ZoneMembershipCondition(SecurityZone.Intranet);
fileCodeGroup.MembershipCondition = zoneCondition;
}
// Add a child group with read-access file permission to the specified
// code group.
private static void addChildCodeGroup(ref FileCodeGroup fileCodeGroup)
{
// Create a file code group with read-access permission.
FileCodeGroup tempFolderCodeGroup = new FileCodeGroup(
new AllMembershipCondition(),
FileIOPermissionAccess.Read);
// Set the name of the child code group and add it to
// the specified code group.
tempFolderCodeGroup.Name = "Read-only group";
fileCodeGroup.AddChild(tempFolderCodeGroup);
}
// Compare the two specified file code groups for equality.
private static bool CompareTwoCodeGroups(
FileCodeGroup firstCodeGroup, FileCodeGroup secondCodeGroup)
{
if (firstCodeGroup.Equals(secondCodeGroup))
{
Console.WriteLine("The two code groups are equal.");
return true;
}
else
{
Console.WriteLine("The two code groups are not equal.");
return false;
}
}
// Retrieve the resolved policy based on Evidence from the executing
// assembly found in the specified code group.
private static string ResolveEvidence(CodeGroup fileCodeGroup)
{
string policyString = "";
// Resolve the policy based on evidence in the executing assembly.
Assembly assembly = typeof(Members).Assembly;
Evidence executingEvidence = assembly.Evidence;
PolicyStatement policy = fileCodeGroup.Resolve(executingEvidence);
if (policy != null)
{
policyString = policy.ToString();
}
return policyString;
}
// Retrieve the resolved code group based on the Evidence from
// the executing assembly found in the specified code group.
private static FileCodeGroup ResolveGroupToEvidence(
FileCodeGroup fileCodeGroup)
{
// Resolve matching code groups to the executing assembly.
Assembly assembly = typeof(Members).Assembly;
Evidence evidence = assembly.Evidence;
CodeGroup codeGroup =
fileCodeGroup.ResolveMatchingCodeGroups(evidence);
return (FileCodeGroup)codeGroup;
}
// If a domain attribute is not found in the specified FileCodeGroup,
// add a child XML element identifying a custom membership condition.
private static void addXmlMember(ref FileCodeGroup fileCodeGroup)
{
SecurityElement xmlElement = fileCodeGroup.ToXml();
SecurityElement rootElement = new SecurityElement("CodeGroup");
if (xmlElement.Attribute("domain") == null)
{
SecurityElement newElement =
new SecurityElement("CustomMembershipCondition");
newElement.AddAttribute("class","CustomMembershipCondition");
newElement.AddAttribute("version","1");
newElement.AddAttribute("domain","contoso.com");
rootElement.AddChild(newElement);
fileCodeGroup.FromXml(rootElement);
}
Console.WriteLine("Added a custom membership condition:");
Console.WriteLine(rootElement.ToString());
}
// Print the properties of the specified code group to the console.
private static void PrintCodeGroup(CodeGroup codeGroup)
{
// Compare the type of the specified object with the FileCodeGroup
// type.
if (!codeGroup.GetType().Equals(typeof(FileCodeGroup)))
{
throw new ArgumentException("Expected the FileCodeGroup type.");
}
string codeGroupName = codeGroup.Name;
string membershipCondition = codeGroup.MembershipCondition.ToString();
string permissionSetName = codeGroup.PermissionSetName;
int hashCode = codeGroup.GetHashCode();
string mergeLogic = "";
if (codeGroup.MergeLogic.Equals("Union"))
{
mergeLogic = " with Union merge logic";
}
// Retrieve the class path for FileCodeGroup.
string fileGroupClass = codeGroup.ToString();
// Write summary to the console window.
Console.WriteLine("\n*** " + fileGroupClass + " summary ***");
Console.Write("A FileCodeGroup named ");
Console.Write(codeGroupName + mergeLogic);
Console.Write(" has been created with hash code" + hashCode + ".");
Console.Write("This code group contains a " + membershipCondition);
Console.Write(" membership condition with the ");
Console.Write(permissionSetName + " permission set. ");
Console.Write("The code group has the following security policy: ");
Console.WriteLine(ResolveEvidence(codeGroup));
int childCount = codeGroup.Children.Count;
if (childCount > 0 )
{
Console.Write("There are " + childCount);
Console.WriteLine(" child code groups in this code group.");
// Iterate through the child code groups to display their names
// and remove them from the specified code group.
for (int i=0; i < childCount; i++)
{
// Get child code group as type FileCodeGroup.
FileCodeGroup childCodeGroup =
(FileCodeGroup)codeGroup.Children[i];
Console.Write("Removing the " + childCodeGroup.Name + ".");
// Remove child code group.
codeGroup.RemoveChild(childCodeGroup);
}
Console.WriteLine();
}
else
{
Console.Write("There are no child code groups");
Console.WriteLine(" in this code group.");
}
}
}
//
输出:
The two code groups are equal. Added a custom membership condition:Comparing the resolved code group with the initial code group. The two code groups are not equal. *** System.Security.Policy.FileCodeGroup summary *** A FileCodeGroup named with Union merge logic has been created with hash code 113151473. This code group contains a Zone - Intranet membership condition with the Same directory FileIO - NoAccess permission set. The code group has the following security policy: There are 1 child code groups in this code group. Removing the Read-only group. This sample completed successfully; press Enter to exit.