Aracılığıyla paylaş


ClaimsAuthorizationManager.LoadCustomConfiguration(XmlNodeList) Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılındığında XML'den özel yapılandırma yükler.

public:
 virtual void LoadCustomConfiguration(System::Xml::XmlNodeList ^ nodelist);
public virtual void LoadCustomConfiguration (System.Xml.XmlNodeList nodelist);
abstract member LoadCustomConfiguration : System.Xml.XmlNodeList -> unit
override this.LoadCustomConfiguration : System.Xml.XmlNodeList -> unit
Public Overridable Sub LoadCustomConfiguration (nodelist As XmlNodeList)

Parametreler

nodelist
XmlNodeList

Özel yapılandırma öğeleri. Listedeki her düğüm türündedir XmlElement.

Uygulamalar

Örnekler

Konu başlıklarında ClaimsAuthorizationManager kullanılan kod örnekleri örnekten Claims Based Authorization alınır. Bu örnek, yapılandırmada belirtilen bir ilkeye göre konuları yetkilendirebilen özel talep yetkilendirme yöneticisi sağlar. Özel talep yetkilendirme yöneticisi üç temel bileşenden ClaimsAuthorizationManager oluşur: yöneticisini uygulayan bir sınıf, ResourceAction bir kaynakla eylemi eşleştiren sınıf ve yapılandırma dosyasında belirtilen ilkeyi okuyan ve derleyen bir ilke okuyucu. Bu derlenmiş ilke daha sonra talep yetkilendirme yöneticisi tarafından kaynaklara erişim yetkisi vermek üzere bir sorumluyu değerlendirmek için kullanılabilir. Kısalık için tüm öğeler gösterilmez. Bu örnek ve WIF için kullanılabilen diğer örnekler ve bunların nereden indirileceği hakkında bilgi için bkz. WIF Kod Örneği Dizini.

Aşağıdaki kod, yönteminin geçersiz kılma işlemini LoadCustomConfiguration gösterir. Bu yöntem, yapılandırma dosyasında belirtilen yetkilendirme ilkelerini okumak ve derlemek için yardımcı ilke okuyucu sınıfını kullanır (gösterilmez). İlkeler bir sözlüğe eklenir ve hedeflendikleri kaynaktan ve eylemden oluşturulan bir ResourceAction anahtar nesnesi tarafından erişilir.

static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
PolicyReader _policyReader = new PolicyReader();
/// <summary>
/// Overloads  the base class method to load the custom policies from the config file
/// </summary>
/// <param name="nodelist">XmlNodeList containing the policy information read from the config file</param>
public override void LoadCustomConfiguration(XmlNodeList nodelist)
{
    Expression<Func<ClaimsPrincipal, bool>> policyExpression;

    foreach (XmlNode node in nodelist)
    {
        //
        // Initialize the policy cache
        //
        XmlDictionaryReader rdr = XmlDictionaryReader.CreateDictionaryReader(new XmlTextReader(new StringReader(node.OuterXml)));
        rdr.MoveToContent();

        string resource = rdr.GetAttribute("resource");
        string action = rdr.GetAttribute("action");

        policyExpression = _policyReader.ReadPolicy(rdr);

        //
        // Compile the policy expression into a function
        //
        Func<ClaimsPrincipal, bool> policy = policyExpression.Compile();

        //
        // Insert the policy function into the policy cache
        //
        _policies[new ResourceAction(resource, action)] = policy;
    }
}

Aşağıdaki kod, özel talep yöneticisi tarafından kullanılan sınıfı gösterir ResourceAction .


using System;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Class to encapsulate resource/action pair
    /// </summary>
    public class ResourceAction
    {
        public string Resource;
        public string Action;

        /// <summary>
        /// Checks if the current instance is equal to the given object by comparing the resource and action values
        /// </summary>
        /// <param name="obj">object to compare to</param>
        /// <returns>True if equal, else false.</returns>
        public override bool Equals(object obj)
        {
            ResourceAction ra = obj as ResourceAction;
            if (ra != null)
            {
                return ((string.Compare(ra.Resource, Resource, true) == 0) && (string.Compare(ra.Action, Action, true) == 0));
            }

            return base.Equals(obj);
        }

        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            return (Resource + Action).ToLower().GetHashCode();
        }

        /// <summary>
        /// Creates an instance of ResourceAction class.
        /// </summary>
        /// <param name="resource">The resource name.</param>
        /// <param name="action">The action.</param>
        /// <exception cref="ArgumentNullException">when <paramref name="resource"/> is null</exception>
        public ResourceAction(string resource, string action)
        {
            if (string.IsNullOrEmpty(resource))
            {
                throw new ArgumentNullException("resource");
            }

            Resource = resource;
            Action = action;
        }
    }
}

Talep yetkilendirme yöneticisi tarafından kullanılan ilke, claimsAuthorizationManager> öğesi altındaki< özel <policy> öğeler tarafından belirtilir. Bu ilke, yöntemi tarafından LoadCustomConfiguration okunur ve derlenmiş. İlk ilkede, belirtilen kaynakta belirtilen eylemi gerçekleştirmek için sorumlunun belirtilen taleplerden birine sahip olması gerekir. İkinci ilkede, sorumlunun belirtilen kaynakta belirtilen eylemi gerçekleştirebilmesi için her iki beyana da sahip olması gerekir. Diğer tüm durumlarda, sahip olduğu taleplerden bağımsız olarak sorumluya otomatik olarak erişim verilir.

<system.identityModel>
  <identityConfiguration>
    <claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
      <policy resource="http://localhost:28491/Developers.aspx" action="GET">
        <or>
          <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
          <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
        </or>
      </policy>
      <policy resource="http://localhost:28491/Administrators.aspx" action="GET">
        <and>
          <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
          <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
        </and>
      </policy>
      <policy resource="http://localhost:28491/Default.aspx" action="GET">
      </policy>
      <policy resource="http://localhost:28491/" action="GET">
      </policy>
      <policy resource="http://localhost:28491/Claims.aspx" action="GET">
      </policy>
    </claimsAuthorizationManager>

    ...

  </identityConfiguration>
</system.identityModel>

Açıklamalar

LoadCustomConfiguration yöntemi yapılandırma altyapısı tarafından çağrılır. Bu yöntem çağrıldığında, nodelist yapılandırma dosyasından claimsAuthorizationManager> öğesinin en üst düzey alt öğelerini< içerir. Bu öğelerin her biri de türetilmiş sınıfınız için tanımladığınız yapılandırma şemasına bağlı olarak öznitelikler veya alt öğeler içerebilir. Yapılandırma dosyasındaki öğesinin <claimsAuthorizationManager> altında hiçbir alt öğe görünmüyorsa, bu yöntem çağrılmıyordur.

Varsayılan uygulama bir NotImplementedExceptionoluşturur. Talep yetkilendirme yöneticinizin bir yapılandırma dosyasından başlatılmasını etkinleştirmek için türetilmiş sınıfınızda bu yöntemi geçersiz kılın. Genellikle, yapılandırma öğeleri bir yetkilendirme ilkesini ifade etmek için kullanılır; ancak, öğeleri tanımlayabilir ve uygulamanızın gereksinimlerine göre anlamlı herhangi bir şekilde kullanabilirsiniz.

Şunlara uygulanır