SecurityElement Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa o modelo de objeto XML para codificar objetos de segurança. Essa classe não pode ser herdada.
public ref class SecurityElement sealed
[System.Serializable]
public sealed class SecurityElement
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SecurityElement
public sealed class SecurityElement
[<System.Serializable>]
type SecurityElement = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type SecurityElement = class
type SecurityElement = class
Public NotInheritable Class SecurityElement
- Herança
-
SecurityElement
- Atributos
Exemplos
O exemplo a seguir mostra o uso de membros da SecurityElement classe.
using System;
using System.Security;
using System.Collections;
class SecurityElementMembers
{
[STAThread]
static void Main(string[] args)
{
SecurityElement xmlRootElement =
new SecurityElement("RootTag", "XML security tree");
AddAttribute(xmlRootElement,"creationdate",DateTime.Now.ToString());
AddChildElement(xmlRootElement,"destroytime",
DateTime.Now.AddSeconds(1.0).ToString());
SecurityElement windowsRoleElement =
new SecurityElement("WindowsMembership.WindowsRole");
windowsRoleElement.AddAttribute("version","1.00");
// Add a child element and a creationdate attribute.
AddChildElement(windowsRoleElement,"BabyElement",
"This is a child element");
AddAttribute(windowsRoleElement,"creationdate",
DateTime.Now.ToString());
xmlRootElement.AddChild(windowsRoleElement);
CompareAttributes(xmlRootElement, "creationdate");
ConvertToHashTable(xmlRootElement);
DisplaySummary(xmlRootElement);
// Determine if the security element is too old to keep.
xmlRootElement = DestroyTree(xmlRootElement);
if (xmlRootElement != null)
{
string elementInXml = xmlRootElement.ToString();
Console.WriteLine(elementInXml);
}
Console.WriteLine("This sample completed successfully; " +
"press Enter to exit.");
Console.ReadLine();
}
// Add an attribute to the specified security element.
private static SecurityElement AddAttribute(
SecurityElement xmlElement,
string attributeName,
string attributeValue)
{
if (xmlElement != null)
{
// Verify that the attribute name and value are valid XML formats.
if (SecurityElement.IsValidAttributeName(attributeName) &&
SecurityElement.IsValidAttributeValue(attributeValue))
{
// Add the attribute to the security element.
xmlElement.AddAttribute(attributeName, attributeValue);
}
}
return xmlElement;
}
// Add a child element to the specified security element.
private static SecurityElement AddChildElement(
SecurityElement parentElement,
string tagName,
string tagText)
{
if (parentElement != null)
{
// Ensure that the tag text is in valid XML format.
if (!SecurityElement.IsValidText(tagText))
{
// Replace invalid text with valid XML text
// to enforce proper XML formatting.
tagText = SecurityElement.Escape(tagText);
}
// Determine whether the tag is in valid XML format.
if (SecurityElement.IsValidTag(tagName))
{
SecurityElement childElement;
childElement = parentElement.SearchForChildByTag(tagName);
if (childElement != null)
{
String elementText;
elementText = parentElement.SearchForTextOfTag(tagName);
if (!elementText.Equals(tagText))
{
// Add child element to the parent security element.
parentElement.AddChild(
new SecurityElement(tagName, tagText));
}
}
else
{
// Add child element to the parent security element.
parentElement.AddChild(
new SecurityElement(tagName, tagText));
}
}
}
return parentElement;
}
// Create and display a summary sentence
// about the specified security element.
private static void DisplaySummary(SecurityElement xmlElement)
{
// Retrieve tag name for the security element.
string xmlTreeName = xmlElement.Tag.ToString();
// Retrieve tag text for the security element.
string xmlTreeDescription = xmlElement.Text;
// Retrieve value of the creationdate attribute.
string xmlCreationDate = xmlElement.Attribute("creationdate");
// Retrieve the number of children under the security element.
string childrenCount = xmlElement.Children.Count.ToString();
string outputMessage = "The security XML tree named " + xmlTreeName;
outputMessage += "(" + xmlTreeDescription + ")";
outputMessage += " was created on " + xmlCreationDate + " and ";
outputMessage += "contains " + childrenCount + " child elements.";
Console.WriteLine(outputMessage);
}
// Compare the first two occurrences of an attribute
// in the specified security element.
private static void CompareAttributes(
SecurityElement xmlElement, string attributeName)
{
// Create a hash table containing the security element's attributes.
Hashtable attributeKeys = xmlElement.Attributes;
string attributeValue = attributeKeys[attributeName].ToString();
foreach(SecurityElement xmlChild in xmlElement.Children)
{
if (attributeValue.Equals(xmlChild.Attribute(attributeName)))
{
// The security elements were created at the exact same time.
}
}
}
// Convert the contents of the specified security element
// to hash codes stored in a hash table.
private static void ConvertToHashTable(SecurityElement xmlElement)
{
// Create a hash table to hold hash codes of the security elements.
Hashtable xmlAsHash = new Hashtable();
int rootIndex = xmlElement.GetHashCode();
xmlAsHash.Add(rootIndex, "root");
int parentNum = 0;
foreach(SecurityElement xmlParent in xmlElement.Children)
{
parentNum++;
xmlAsHash.Add(xmlParent.GetHashCode(), "parent" + parentNum);
if ((xmlParent.Children != null) &&
(xmlParent.Children.Count > 0))
{
int childNum = 0;
foreach(SecurityElement xmlChild in xmlParent.Children)
{
childNum++;
xmlAsHash.Add(xmlChild.GetHashCode(), "child" + childNum);
}
}
}
}
// Delete the specified security element if the current time is past
// the time stored in the destroytime tag.
private static SecurityElement DestroyTree(SecurityElement xmlElement)
{
SecurityElement localXmlElement = xmlElement;
SecurityElement destroyElement =
localXmlElement.SearchForChildByTag("destroytime");
// Verify that a destroytime tag exists.
if (localXmlElement.SearchForChildByTag("destroytime") != null)
{
// Retrieve the destroytime text to get the time
// the tree can be destroyed.
string storedDestroyTime =
localXmlElement.SearchForTextOfTag("destroytime");
DateTime destroyTime = DateTime.Parse(storedDestroyTime);
if (DateTime.Now > destroyTime)
{
localXmlElement = null;
Console.WriteLine("The XML security tree has been deleted.");
}
}
// Verify that xmlElement is of type SecurityElement.
if (xmlElement.GetType().Equals(
typeof(System.Security.SecurityElement)))
{
// Determine whether the localXmlElement object
// differs from xmlElement.
if (xmlElement.Equals(localXmlElement))
{
// Verify that the tags, attributes and children of the
// two security elements are identical.
if (xmlElement.Equal(localXmlElement))
{
// Return the original security element.
return xmlElement;
}
}
}
// Return the modified security element.
return localXmlElement;
}
}
//
// This sample produces the following output:
//
// The security XML tree named RootTag(XML security tree)
// was created on 2/23/2004 1:23:00 PM and contains 2 child elements.
//<RootTag creationdate="2/23/2004 1:23:00 PM">XML security tree
// <destroytime>2/23/2004 1:23:01 PM</destroytime>
// <WindowsMembership.WindowsRole version="1.00"
// creationdate="2/23/2004 1:23:00 PM">
// <BabyElement>This is a child element.</BabyElement>
//
//This sample completed successfully; press Exit to continue.
Imports System.Security
Imports System.Collections
Class SecurityElementMembers
<STAThread()> _
Shared Sub Main(ByVal args() As String)
Dim xmlRootElement As New SecurityElement("RootTag", "XML security tree")
AddAttribute(xmlRootElement, "creationdate", DateTime.Now.ToString())
AddChildElement(xmlRootElement, "destroytime", DateTime.Now.AddSeconds(1.0).ToString())
Dim windowsRoleElement As New SecurityElement("WindowsMembership.WindowsRole")
windowsRoleElement.AddAttribute("version", "1.00")
' Add a child element and a creationdate attribute.
AddChildElement(windowsRoleElement, "BabyElement", "This is a child element")
AddAttribute(windowsRoleElement, "creationdate", DateTime.Now.ToString())
xmlRootElement.AddChild(windowsRoleElement)
CompareAttributes(xmlRootElement, "creationdate")
ConvertToHashTable(xmlRootElement)
DisplaySummary(xmlRootElement)
' Determine if the security element is too old to keep.
xmlRootElement = DestroyTree(xmlRootElement)
If Not (xmlRootElement Is Nothing) Then
Dim elementInXml As String = xmlRootElement.ToString()
Console.WriteLine(elementInXml)
End If
Console.WriteLine("This sample completed successfully; " + "press Enter to exit.")
Console.ReadLine()
End Sub
' Add an attribute to the specified security element.
Private Shared Function AddAttribute(ByVal xmlElement As SecurityElement, ByVal attributeName As String, ByVal attributeValue As String) As SecurityElement
If Not (xmlElement Is Nothing) Then
' Verify that the attribute name and value are valid XML formats.
If SecurityElement.IsValidAttributeName(attributeName) AndAlso SecurityElement.IsValidAttributeValue(attributeValue) Then
' Add the attribute to the security element.
xmlElement.AddAttribute(attributeName, attributeValue)
End If
End If
Return xmlElement
End Function 'AddAttribute
' Add a child element to the specified security element.
Private Shared Function AddChildElement(ByVal parentElement As SecurityElement, ByVal tagName As String, ByVal tagText As String) As SecurityElement
If Not (parentElement Is Nothing) Then
' Ensure that the tag text is in valid XML format.
If Not SecurityElement.IsValidText(tagText) Then
' Replace invalid text with valid XML text
' to enforce proper XML formatting.
tagText = SecurityElement.Escape(tagText)
End If
' Determine whether the tag is in valid XML format.
If SecurityElement.IsValidTag(tagName) Then
Dim childElement As SecurityElement
childElement = parentElement.SearchForChildByTag(tagName)
If Not (childElement Is Nothing) Then
Dim elementText As String
elementText = parentElement.SearchForTextOfTag(tagName)
If Not elementText.Equals(tagText) Then
' Add child element to the parent security element.
parentElement.AddChild(New SecurityElement(tagName, tagText))
End If
Else
' Add child element to the parent security element.
parentElement.AddChild(New SecurityElement(tagName, tagText))
End If
End If
End If
Return parentElement
End Function 'AddChildElement
' Create and display a summary sentence
' about the specified security element.
Private Shared Sub DisplaySummary(ByVal xmlElement As SecurityElement)
' Retrieve tag name for the security element.
Dim xmlTreeName As String = xmlElement.Tag.ToString()
' Retrieve tag text for the security element.
Dim xmlTreeDescription As String = xmlElement.Text
' Retrieve value of the creationdate attribute.
Dim xmlCreationDate As String = xmlElement.Attribute("creationdate")
' Retrieve the number of children under the security element.
Dim childrenCount As String = xmlElement.Children.Count.ToString()
Dim outputMessage As String = "The security XML tree named " + xmlTreeName
outputMessage += "(" + xmlTreeDescription + ")"
outputMessage += " was created on " + xmlCreationDate + " and "
outputMessage += "contains " + childrenCount + " child elements."
Console.WriteLine(outputMessage)
End Sub
' Compare the first two occurrences of an attribute
' in the specified security element.
Private Shared Sub CompareAttributes(ByVal xmlElement As SecurityElement, ByVal attributeName As String)
' Create a hash table containing the security element's attributes.
Dim attributeKeys As Hashtable = xmlElement.Attributes
Dim attributeValue As String = attributeKeys(attributeName).ToString()
Dim xmlChild As SecurityElement
For Each xmlChild In xmlElement.Children
If attributeValue.Equals(xmlChild.Attribute(attributeName)) Then
End If
Next xmlChild
' The security elements were created at the exact same time.
End Sub
' Convert the contents of the specified security element
' to hash codes stored in a hash table.
Private Shared Sub ConvertToHashTable(ByVal xmlElement As SecurityElement)
' Create a hash table to hold hash codes of the security elements.
Dim xmlAsHash As New Hashtable()
Dim rootIndex As Integer = xmlElement.GetHashCode()
xmlAsHash.Add(rootIndex, "root")
Dim parentNum As Integer = 0
Dim xmlParent As SecurityElement
For Each xmlParent In xmlElement.Children
parentNum += 1
xmlAsHash.Add(xmlParent.GetHashCode(), "parent" + parentNum.ToString())
If Not (xmlParent.Children Is Nothing) AndAlso xmlParent.Children.Count > 0 Then
Dim childNum As Integer = 0
Dim xmlChild As SecurityElement
For Each xmlChild In xmlParent.Children
childNum += 1
xmlAsHash.Add(xmlChild.GetHashCode(), "child" + childNum.ToString())
Next xmlChild
End If
Next xmlParent
End Sub
' Delete the specified security element if the current time is past
' the time stored in the destroytime tag.
Private Shared Function DestroyTree(ByVal xmlElement As SecurityElement) As SecurityElement
Dim localXmlElement As SecurityElement = xmlElement
Dim destroyElement As SecurityElement = localXmlElement.SearchForChildByTag("destroytime")
' Verify that a destroytime tag exists.
If Not (localXmlElement.SearchForChildByTag("destroytime") Is Nothing) Then
' Retrieve the destroytime text to get the time
' the tree can be destroyed.
Dim storedDestroyTime As String = localXmlElement.SearchForTextOfTag("destroytime")
Dim destroyTime As DateTime = DateTime.Parse(storedDestroyTime)
If DateTime.Now > destroyTime Then
localXmlElement = Nothing
Console.WriteLine("The XML security tree has been deleted.")
End If
End If
' Verify that xmlElement is of type SecurityElement.
If xmlElement.GetType().Equals(GetType(System.Security.SecurityElement)) Then
' Determine whether the localXmlElement object
' differs from xmlElement.
If xmlElement.Equals(localXmlElement) Then
' Verify that the tags, attributes and children of the
' two security elements are identical.
If xmlElement.Equal(localXmlElement) Then
' Return the original security element.
Return xmlElement
End If
End If
End If
' Return the modified security element.
Return localXmlElement
End Function 'DestroyTree
End Class
'
' This sample produces the following output:
'
' The security XML tree named RootTag(XML security tree)
' was created on 2/23/2004 1:23:00 PM and contains 2 child elements.
'<RootTag creationdate="2/23/2004 1:23:00 PM">XML security tree
' <destroytime>2/23/2004 1:23:01 PM</destroytime>
' <WindowsMembership.WindowsRole version="1.00"
' creationdate="2/23/2004 1:23:00 PM">
' <BabyElement>This is a child element.</BabyElement>
'
'This sample completed successfully; press Exit to continue.
Comentários
Essa classe destina-se a ser uma implementação leve de um modelo de objeto XML simples para uso dentro do sistema de segurança e não para uso como um modelo de objeto XML geral. Esta documentação pressupõe um conhecimento básico do XML.
O modelo de objeto XML simples para um elemento consiste nas seguintes partes:
A marca é o nome do elemento.
Os atributos são pares de atributos de nome/valor zero ou mais no elemento.
Os filhos são zero ou mais elementos aninhados dentro
<tag>e</tag>.
É altamente sugerido que a representação XML baseada em atributo seja usada para expressar elementos de segurança e seus valores. Isso significa que as propriedades de um elemento são expressas como atributos e valores de propriedade são expressos como valores de atributo. Evite aninhar texto dentro de marcas. Para qualquer <tag>text</tag> representação, uma representação do tipo <tag value="text"/> geralmente está disponível. O uso dessa representação XML baseada em atributo aumenta a legibilidade e permite a portabilidade WMI fácil da serialização XML resultante.
Um nome de atributo deve ser um caractere ou mais longo e não pode ser null. Se a representação de valor baseada em elemento for usada, os elementos com uma cadeia de caracteres de texto que são null representados no formulário; caso contrário, o <tag/> texto será delimitado pelos <tag> tokens e </tag> pelos tokens. Ambos os formulários podem ser combinados com atributos, que são mostrados se presentes.
As marcas, os atributos e o texto dos elementos, se presentes, sempre diferenciam maiúsculas de minúsculas. O formulário XML contém aspas e escapes quando necessário. Valores de cadeia de caracteres que incluem caracteres inválidos para uso em XML resultam em um ArgumentException. Essas regras se aplicam a todas as propriedades e métodos.
Note
Por motivos de desempenho, a validade do caractere só é verificada quando o elemento é codificado no formulário de texto XML e não em todos os conjuntos de uma propriedade ou método. Métodos estáticos permitem a verificação explícita quando necessário.
Construtores
| Nome | Description |
|---|---|
| SecurityElement(String, String) |
Inicializa uma nova instância da SecurityElement classe com a marca e o texto especificados. |
| SecurityElement(String) |
Inicializa uma nova instância da SecurityElement classe com a marca especificada. |
Propriedades
| Nome | Description |
|---|---|
| Attributes |
Obtém ou define os atributos de um elemento XML como pares nome/valor. |
| Children |
Obtém ou define a matriz de elementos filho do elemento XML. |
| Tag |
Obtém ou define o nome da marca de um elemento XML. |
| Text |
Obtém ou define o texto dentro de um elemento XML. |
Métodos
| Nome | Description |
|---|---|
| AddAttribute(String, String) |
Adiciona um atributo de nome/valor a um elemento XML. |
| AddChild(SecurityElement) |
Adiciona um elemento filho ao elemento XML. |
| Attribute(String) |
Localiza um atributo por nome em um elemento XML. |
| Copy() |
Cria e retorna uma cópia idêntica do objeto atual SecurityElement . |
| Equal(SecurityElement) |
Compara dois objetos de elemento XML para igualdade. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| Escape(String) |
Substitui caracteres XML inválidos em uma cadeia de caracteres pelo equivalente XML válido. |
| FromString(String) |
Cria um elemento de segurança de uma cadeia de caracteres codificada em XML. |
| GetHashCode() |
Serve como a função hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsValidAttributeName(String) |
Determina se uma cadeia de caracteres é um nome de atributo válido. |
| IsValidAttributeValue(String) |
Determina se uma cadeia de caracteres é um valor de atributo válido. |
| IsValidTag(String) |
Determina se uma cadeia de caracteres é uma marca válida. |
| IsValidText(String) |
Determina se uma cadeia de caracteres é válida como texto dentro de um elemento XML. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| SearchForChildByTag(String) |
Localiza um filho pelo nome da marca. |
| SearchForTextOfTag(String) |
Localiza um filho pelo nome da marca e retorna o texto contido. |
| ToString() |
Produz uma representação de cadeia de caracteres de um elemento XML e seus atributos constituintes, elementos filho e texto. |