İngilizce dilinde oku

Aracılığıyla paylaş


SecurityElement Sınıf

Tanım

Güvenlik nesnelerini kodlamaya yönelik XML nesne modelini temsil eder. Bu sınıf devralınamaz.

C#
public sealed class SecurityElement
C#
[System.Serializable]
public sealed class SecurityElement
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class SecurityElement
Devralma
SecurityElement
Öznitelikler

Örnekler

Aşağıdaki örnekte sınıfın üyelerinin kullanımı gösterilmektedir SecurityElement .

C#
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.

Açıklamalar

Bu sınıf, genel XML nesne modeli olarak değil, güvenlik sistemi içinde kullanılmak üzere basit bir XML nesne modelinin basit bir uygulaması olması amaçlanmıştır. Bu belgede, XML hakkında temel bilgiler olduğu varsayılır.

Bir öğenin basit XML nesne modeli aşağıdaki bölümlerden oluşur:

  • etiket, öğe adıdır.

  • Öznitelikler, öğesinde sıfır veya daha fazla ad/değer öznitelik çiftidir.

  • Alt öğeler ve </tag>içinde <tag> iç içe yerleştirilmiş sıfır veya daha fazla öğedir.

Öznitelik tabanlı XML gösteriminin güvenlik öğelerini ve değerlerini ifade etmek için kullanılması kesinlikle önerilir. Bu, bir öğenin özelliklerinin öznitelik olarak, özellik değerlerinin de öznitelik değerleri olarak ifade edildiği anlamına gelir. Metni etiketler içinde iç içe yerleştirmekten kaçının. Herhangi bir <tag>text</tag> gösterim için türün <tag value="text"/> gösterimi genellikle kullanılabilir. Bu öznitelik tabanlı XML gösteriminin kullanılması okunabilirliği artırır ve sonuçta elde edilen XML serileştirmesinin kolay WMI taşınabilirliğini sağlar.

Öznitelik adı bir karakter veya daha uzun olmalıdır ve olamaz null. Öğe tabanlı değer gösterimi kullanılırsa, formda <tag/> temsil edilen bir metin dizesine null sahip öğeler; aksi takdirde, metin ve </tag> belirteçleriyle sınırlandırılır<tag>. Her iki form da varsa gösterilen özniteliklerle birleştirilebilir.

Etiketler, öznitelikler ve varsa öğelerin metni her zaman büyük/küçük harfe duyarlıdır. XML formu, gerektiğinde tırnak işaretleri ve çıkışlar içerir. XML'de kullanım için geçersiz karakterler içeren dize değerleri bir ArgumentExceptionile sonuçlanır. Bu kurallar tüm özellikler ve yöntemler için geçerlidir.

Not

Performans nedenleriyle, karakter geçerliliği yalnızca öğe bir özellik veya yöntemin her kümesinde değil, XML metin biçiminde kodlandığında denetlenmektedir. Statik yöntemler gerektiğinde açık denetime olanak sağlar.

Oluşturucular

SecurityElement(String)

Belirtilen etiketle sınıfının yeni bir örneğini SecurityElement başlatır.

SecurityElement(String, String)

Belirtilen etiket ve metinle sınıfının yeni bir örneğini SecurityElement başlatır.

Özellikler

Attributes

XML öğesinin özniteliklerini ad/değer çiftleri olarak alır veya ayarlar.

Children

XML öğesinin alt öğe dizisini alır veya ayarlar.

Tag

XML öğesinin etiket adını alır veya ayarlar.

Text

XML öğesi içindeki metni alır veya ayarlar.

Yöntemler

AddAttribute(String, String)

XML öğesine bir ad/değer özniteliği ekler.

AddChild(SecurityElement)

XML öğesine bir alt öğe ekler.

Attribute(String)

XML öğesinde ada göre bir öznitelik bulur.

Copy()

Geçerli SecurityElement nesnenin özdeş bir kopyasını oluşturur ve döndürür.

Equal(SecurityElement)

Eşitlik için iki XML öğesi nesnesini karşılaştırır.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Escape(String)

Bir dizedeki geçersiz XML karakterlerini geçerli XML eşdeğerleriyle değiştirir.

FromString(String)

XML ile kodlanmış bir dizeden bir güvenlik öğesi oluşturur.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsValidAttributeName(String)

Dizenin geçerli bir öznitelik adı olup olmadığını belirler.

IsValidAttributeValue(String)

Dizenin geçerli bir öznitelik değeri olup olmadığını belirler.

IsValidTag(String)

Dizenin geçerli bir etiket olup olmadığını belirler.

IsValidText(String)

Bir dizenin XML öğesi içinde metin olarak geçerli olup olmadığını belirler.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
SearchForChildByTag(String)

Etiket adına göre bir alt öğe bulur.

SearchForTextOfTag(String)

Etiket adına göre bir alt öğe bulur ve kapsanan metni döndürür.

ToString()

XML öğesinin ve onun bileşen özniteliklerinin, alt öğelerinin ve metnin dize gösterimini oluşturur.

Şunlara uygulanır

Ürün Sürümler
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1