/// <summary> /// /// </summary> /// <param name="request"></param> public Request(con.RequestElementReadWrite request) { _request = request; this.Text = "Request"; this.SelectedImageIndex = 1; this.ImageIndex = 1; if (_request.Action != null) { this.Nodes.Add(new Action(_request.Action)); } if (_request.Environment != null) { this.Nodes.Add(new Environment(_request.Environment)); } if (_request.Resources != null) { foreach (con.ResourceElementReadWrite resource in _request.Resources) { this.Nodes.Add(new Resource(resource)); } } if (_request.Subjects != null) { foreach (con.SubjectElementReadWrite subject in _request.Subjects) { this.Nodes.Add(new Subject(subject)); } } this.ExpandAll(); }
/// <summary> /// /// </summary> /// <param name="request"></param> public Request( con.RequestElementReadWrite request ) { _request = request; this.Text = "Request"; this.SelectedImageIndex = 1; this.ImageIndex = 1; if( _request.Action != null ) { this.Nodes.Add( new Action( _request.Action ) ); } if( _request.Environment != null ) { this.Nodes.Add( new Environment( _request.Environment ) ) ; } if( _request.Resources != null ) { foreach( con.ResourceElementReadWrite resource in _request.Resources ) { this.Nodes.Add( new Resource( resource ) ); } } if( _request.Subjects != null ) { foreach( con.SubjectElementReadWrite subject in _request.Subjects ) { this.Nodes.Add( new Subject( subject ) ); } } this.ExpandAll(); }
/// <summary> /// Creates a new ContextDocumentReadWrite using the XmlReader instance provided. /// </summary> /// <param name="reader">The XmlReader instance positioned at the begining of the document.</param> /// <param name="schemaVersion">The schema used to validate this context document.</param> public ContextDocumentReadWrite(XmlReader reader, XacmlVersion schemaVersion) { if (reader == null) { throw new ArgumentNullException("reader"); } // Search for the first element. while (reader.Read() && reader.NodeType != XmlNodeType.Element) { } // Keep the contents of the context document. // HACK: Due to XPath validation the document must be readed twice, the first time to load the instance // and the second one to keep a document to execute XPath sentences. _xmlString = reader.ReadOuterXml(); // Read the contents in a new reader. var sreader = new StringReader(_xmlString); // Prepare the validation. var validationHandler = new ValidationEventHandler(vreader_ValidationEventHandler); var settings = new XmlReaderSettings { ValidationType = ValidationType.Schema }; settings.ValidationEventHandler += validationHandler; XmlReader vreader = null; try { switch (schemaVersion) { case XacmlVersion.Version10: case XacmlVersion.Version11: { if (_compiledSchemas11 == null) { var policySchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PolicyDocumentReadWrite.Xacml10PolicySchemaResourceName); Debug.Assert(policySchemaStream != null); var contextSchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Xacml10ContextSchemaResourceName); Debug.Assert(contextSchemaStream != null); _compiledSchemas11 = new XmlSchemaSet(); _compiledSchemas11.Add(XmlSchema.Read(policySchemaStream, validationHandler)); _compiledSchemas11.Add(XmlSchema.Read(contextSchemaStream, validationHandler)); _compiledSchemas11.Compile(); } settings.Schemas.Add(_compiledSchemas11); break; } case XacmlVersion.Version20: { if (_compiledSchemas20 == null) { Stream policySchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PolicyDocumentReadWrite.Xacml20PolicySchemaResourceName); Debug.Assert(policySchemaStream != null); Stream contextSchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Xacml20ContextSchemaResourceName); Debug.Assert(contextSchemaStream != null); _compiledSchemas20 = new XmlSchemaSet(); _compiledSchemas20.Add(XmlSchema.Read(policySchemaStream, validationHandler)); _compiledSchemas20.Add(XmlSchema.Read(contextSchemaStream, validationHandler)); _compiledSchemas20.Compile(); } settings.Schemas.Add(_compiledSchemas20); break; } default: throw new ArgumentException("ÒâÍâµÄ°æ±¾ºÅ" + schemaVersion); } vreader = XmlReader.Create(sreader, settings); while (vreader.Read()) { //Read all the namespaces and keep them in the _namespaces hashtable. if (vreader.HasAttributes) { while (vreader.MoveToNextAttribute()) { if (vreader.LocalName == Consts.Schema1.Namespaces.Xmlns) { _namespaces.Add(vreader.Prefix, vreader.Value); } else if (vreader.Prefix == Consts.Schema1.Namespaces.Xmlns) { _namespaces.Add(vreader.LocalName, vreader.Value); } } vreader.MoveToElement(); } switch (vreader.LocalName) { case Consts.ContextSchema.RequestElement.Request: _request = new RequestElementReadWrite(vreader, schemaVersion); break; case Consts.ContextSchema.ResponseElement.Response: Response = new ResponseElement(vreader, schemaVersion); break; } } } finally { if (vreader != null) { vreader.Close(); } } }
/// <summary> /// Creates a new ContextDocumentReadWrite using the XmlReader instance provided. /// </summary> /// <param name="reader">The XmlReader instance positioned at the begining of the document.</param> /// <param name="schemaVersion">The schema used to validate this context document.</param> public ContextDocumentReadWrite(XmlReader reader, XacmlVersion schemaVersion) { if (reader == null) throw new ArgumentNullException("reader"); // Search for the first element. while (reader.Read() && reader.NodeType != XmlNodeType.Element) { } // Keep the contents of the context document. // HACK: Due to XPath validation the document must be readed twice, the first time to load the instance // and the second one to keep a document to execute XPath sentences. _xmlString = reader.ReadOuterXml(); // Read the contents in a new reader. var sreader = new StringReader(_xmlString); // Prepare the validation. var validationHandler = new ValidationEventHandler(vreader_ValidationEventHandler); var settings = new XmlReaderSettings { ValidationType = ValidationType.Schema }; settings.ValidationEventHandler += validationHandler; XmlReader vreader = null; try { switch (schemaVersion) { case XacmlVersion.Version10: case XacmlVersion.Version11: { if (_compiledSchemas11 == null) { var policySchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PolicyDocumentReadWrite.Xacml10PolicySchemaResourceName); Debug.Assert(policySchemaStream != null); var contextSchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Xacml10ContextSchemaResourceName); Debug.Assert(contextSchemaStream != null); _compiledSchemas11 = new XmlSchemaSet(); _compiledSchemas11.Add(XmlSchema.Read(policySchemaStream, validationHandler)); _compiledSchemas11.Add(XmlSchema.Read(contextSchemaStream, validationHandler)); _compiledSchemas11.Compile(); } settings.Schemas.Add(_compiledSchemas11); break; } case XacmlVersion.Version20: { if (_compiledSchemas20 == null) { Stream policySchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(PolicyDocumentReadWrite.Xacml20PolicySchemaResourceName); Debug.Assert(policySchemaStream != null); Stream contextSchemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Xacml20ContextSchemaResourceName); Debug.Assert(contextSchemaStream != null); _compiledSchemas20 = new XmlSchemaSet(); _compiledSchemas20.Add(XmlSchema.Read(policySchemaStream, validationHandler)); _compiledSchemas20.Add(XmlSchema.Read(contextSchemaStream, validationHandler)); _compiledSchemas20.Compile(); } settings.Schemas.Add(_compiledSchemas20); break; } default: throw new ArgumentException("ÒâÍâµÄ°æ±¾ºÅ" + schemaVersion); } vreader = XmlReader.Create(sreader, settings); while (vreader.Read()) { //Read all the namespaces and keep them in the _namespaces hashtable. if (vreader.HasAttributes) { while (vreader.MoveToNextAttribute()) { if (vreader.LocalName == Consts.Schema1.Namespaces.Xmlns) { _namespaces.Add(vreader.Prefix, vreader.Value); } else if (vreader.Prefix == Consts.Schema1.Namespaces.Xmlns) { _namespaces.Add(vreader.LocalName, vreader.Value); } } vreader.MoveToElement(); } switch (vreader.LocalName) { case Consts.ContextSchema.RequestElement.Request: _request = new RequestElementReadWrite(vreader, schemaVersion); break; case Consts.ContextSchema.ResponseElement.Response: Response = new ResponseElement(vreader, schemaVersion); break; } } } finally { if (vreader != null) { vreader.Close(); } } }