/// <summary>从 XML 编码重新构造具有指定状态的权限。</summary>
 /// <param name="securityElement">
 /// <see cref="T:System.Security.SecurityElement" />,包含用于重新构造权限的 XML 编码。</param>
 /// <exception cref="T:System.ArgumentNullException">
 /// <paramref name="securityElement" /> 为 null。</exception>
 /// <exception cref="T:System.ArgumentException">
 /// <paramref name="securityElement" /> 不是一个有效的权限元素。- 或 -不支持 <paramref name="securityElement" /> 的版本号。</exception>
 public override void FromXml(SecurityElement securityElement)
 {
     CodeAccessPermission.ValidateElement(securityElement, (IPermission)this);
     if (XMLUtil.IsUnrestricted(securityElement))
     {
         this.m_flags         = KeyContainerPermissionFlags.AllFlags;
         this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
     }
     else
     {
         this.m_flags = KeyContainerPermissionFlags.NoFlags;
         string str = securityElement.Attribute("Flags");
         if (str != null)
         {
             KeyContainerPermissionFlags flags = (KeyContainerPermissionFlags)Enum.Parse(typeof(KeyContainerPermissionFlags), str);
             KeyContainerPermission.VerifyFlags(flags);
             this.m_flags = flags;
         }
         this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
         if (securityElement.InternalChildren == null || securityElement.InternalChildren.Count == 0)
         {
             return;
         }
         foreach (SecurityElement child in securityElement.Children)
         {
             if (child != null && string.Equals(child.Tag, "AccessList"))
             {
                 this.AddAccessEntries(child);
             }
         }
     }
 }
        public override IPermission Union(IPermission target)
        {
            KeyContainerPermission kcp = Cast(target);

            if (kcp == null)
            {
                return(Copy());
            }

            KeyContainerPermissionAccessEntryCollection kcpaec = new KeyContainerPermissionAccessEntryCollection();

            // copy first group
            foreach (KeyContainerPermissionAccessEntry kcpae in _accessEntries)
            {
                kcpaec.Add(kcpae);
            }
            // copy second group...
            foreach (KeyContainerPermissionAccessEntry kcpae in kcp._accessEntries)
            {
                // ... but only if not present in first group
                if (_accessEntries.IndexOf(kcpae) == -1)
                {
                    kcpaec.Add(kcpae);
                }
            }

            if (kcpaec.Count == 0)
            {
                return(new KeyContainerPermission((_flags | kcp._flags)));
            }

            KeyContainerPermissionAccessEntry[] list = new KeyContainerPermissionAccessEntry [kcpaec.Count];
            kcpaec.CopyTo(list, 0);
            return(new KeyContainerPermission((_flags | kcp._flags), list));
        }
示例#3
0
        public override void FromXml (SecurityElement securityElement) {
            CodeAccessPermission.ValidateElement(securityElement, this);
            if (XMLUtil.IsUnrestricted(securityElement)) {
                m_flags = KeyContainerPermissionFlags.AllFlags;
                m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
                return;
            }

            m_flags = KeyContainerPermissionFlags.NoFlags;
            string strFlags = securityElement.Attribute("Flags");
            if (strFlags != null) {
                KeyContainerPermissionFlags flags = (KeyContainerPermissionFlags) Enum.Parse(typeof(KeyContainerPermissionFlags), strFlags);
                VerifyFlags(flags);
                m_flags = flags;
            }
            m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);

            if (securityElement.InternalChildren != null && securityElement.InternalChildren.Count != 0) { 
                IEnumerator enumerator = securityElement.Children.GetEnumerator();
                while (enumerator.MoveNext()) {
                    SecurityElement current = (SecurityElement) enumerator.Current;
                    if (current != null) {
                        if (String.Equals(current.Tag, "AccessList"))
                            AddAccessEntries(current);
                    }
                }
            }
        }
        /// <summary>Creates a permission that is the union of the current permission and the specified permission.</summary>
        /// <returns>A new permission that represents the union of the current permission and the specified permission.</returns>
        /// <param name="target">A permission to combine with the current permission. It must be of the same type as the current permission. </param>
        /// <exception cref="T:System.ArgumentException">
        ///   <paramref name="target" /> is not null and does not specify a permission of the same type as the current permission. </exception>
        public override IPermission Union(IPermission target)
        {
            KeyContainerPermission keyContainerPermission = this.Cast(target);

            if (keyContainerPermission == null)
            {
                return(this.Copy());
            }
            KeyContainerPermissionAccessEntryCollection keyContainerPermissionAccessEntryCollection = new KeyContainerPermissionAccessEntryCollection();

            foreach (KeyContainerPermissionAccessEntry accessEntry in this._accessEntries)
            {
                keyContainerPermissionAccessEntryCollection.Add(accessEntry);
            }
            foreach (KeyContainerPermissionAccessEntry accessEntry2 in keyContainerPermission._accessEntries)
            {
                if (this._accessEntries.IndexOf(accessEntry2) == -1)
                {
                    keyContainerPermissionAccessEntryCollection.Add(accessEntry2);
                }
            }
            if (keyContainerPermissionAccessEntryCollection.Count == 0)
            {
                return(new KeyContainerPermission(this._flags | keyContainerPermission._flags));
            }
            KeyContainerPermissionAccessEntry[] array = new KeyContainerPermissionAccessEntry[keyContainerPermissionAccessEntryCollection.Count];
            keyContainerPermissionAccessEntryCollection.CopyTo(array, 0);
            return(new KeyContainerPermission(this._flags | keyContainerPermission._flags, array));
        }
示例#5
0
 public KeyContainerPermission (PermissionState state) {
     if (state == PermissionState.Unrestricted)
         m_flags = KeyContainerPermissionFlags.AllFlags;
     else if (state == PermissionState.None)
         m_flags = KeyContainerPermissionFlags.NoFlags;
     else
         throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
     m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
  }
		public KeyContainerPermission (KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList) 
		{
			SetFlags (flags);
			if (accessList != null) {
				_accessEntries = new KeyContainerPermissionAccessEntryCollection ();
				foreach (KeyContainerPermissionAccessEntry kcpae in accessList) {
					_accessEntries.Add (kcpae);
				}
			}
		}
示例#7
0
        public KeyContainerPermission (KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList) {
            if (accessList == null) 
                throw new ArgumentNullException("accessList");
            Contract.EndContractBlock();

            VerifyFlags(flags);
            m_flags = flags;
            m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
            for (int index = 0; index < accessList.Length; index++) {
                m_accessEntries.Add(accessList[index]);
            }
        }
 public KeyContainerPermission(KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList)
 {
     SetFlags(flags);
     if (accessList != null)
     {
         _accessEntries = new KeyContainerPermissionAccessEntryCollection();
         foreach (KeyContainerPermissionAccessEntry kcpae in accessList)
         {
             _accessEntries.Add(kcpae);
         }
     }
 }
 public KeyContainerPermission(KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList)
 {
     if (accessList == null)
     {
         throw new ArgumentNullException("accessList");
     }
     VerifyFlags(flags);
     this.m_flags = flags;
     this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
     for (int i = 0; i < accessList.Length; i++)
     {
         this.m_accessEntries.Add(accessList[i]);
     }
 }
 /// <summary>用指定的全局访问和特定的密钥容器访问权限来初始化 <see cref="T:System.Security.Permissions.KeyContainerPermission" /> 类的新实例。</summary>
 /// <param name="flags">
 /// <see cref="T:System.Security.Permissions.KeyContainerPermissionFlags" /> 值的按位组合。</param>
 /// <param name="accessList">
 /// <see cref="T:System.Security.Permissions.KeyContainerPermissionAccessEntry" /> 对象数组,标识特定的密钥容器访问权限。</param>
 /// <exception cref="T:System.ArgumentException">
 /// <paramref name="flags" /> 不是 <see cref="T:System.Security.Permissions.KeyContainerPermissionFlags" /> 值的有效组合。</exception>
 /// <exception cref="T:System.ArgumentNullException">
 /// <paramref name="accessList" /> 为 null。</exception>
 public KeyContainerPermission(KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList)
 {
     if (accessList == null)
     {
         throw new ArgumentNullException("accessList");
     }
     KeyContainerPermission.VerifyFlags(flags);
     this.m_flags         = flags;
     this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
     for (int index = 0; index < accessList.Length; ++index)
     {
         this.m_accessEntries.Add(accessList[index]);
     }
 }
 public KeyContainerPermission(PermissionState state)
 {
     if (state == PermissionState.Unrestricted)
     {
         this.m_flags = KeyContainerPermissionFlags.AllFlags;
     }
     else
     {
         if (state != PermissionState.None)
         {
             throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPermissionState"));
         }
         this.m_flags = KeyContainerPermissionFlags.NoFlags;
     }
     this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
 }
 /// <summary>用指定的访问权限初始化 <see cref="T:System.Security.Permissions.KeyContainerPermission" /> 类的新实例。</summary>
 /// <param name="flags">
 /// <see cref="T:System.Security.Permissions.KeyContainerPermissionFlags" /> 值的按位组合。</param>
 /// <exception cref="T:System.ArgumentException">
 /// <paramref name="flags" /> 不是 <see cref="T:System.Security.Permissions.KeyContainerPermissionFlags" /> 值的有效组合。</exception>
 public KeyContainerPermission(KeyContainerPermissionFlags flags)
 {
     KeyContainerPermission.VerifyFlags(flags);
     this.m_flags         = flags;
     this.m_accessEntries = new KeyContainerPermissionAccessEntryCollection(this.m_flags);
 }
        public override void FromXml (SecurityElement securityElement) {
            CodeAccessPermission.ValidateElement(securityElement, this);
            if (XMLUtil.IsUnrestricted(securityElement)) {
                m_flags = KeyContainerPermissionFlags.AllFlags;
                m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
                return;
            }

            m_flags = KeyContainerPermissionFlags.NoFlags;
            string strFlags = securityElement.Attribute("Flags");
            if (strFlags != null) {
                KeyContainerPermissionFlags flags = (KeyContainerPermissionFlags) Enum.Parse(typeof(KeyContainerPermissionFlags), strFlags);
                VerifyFlags(flags);
                m_flags = flags;
            }
            m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);

            if (securityElement.InternalChildren != null && securityElement.InternalChildren.Count != 0) { 
                IEnumerator enumerator = securityElement.Children.GetEnumerator();
                while (enumerator.MoveNext()) {
                    SecurityElement current = (SecurityElement) enumerator.Current;
                    if (current != null) {
                        if (String.Equals(current.Tag, "AccessList"))
                            AddAccessEntries(current);
                    }
                }
            }
        }
        public KeyContainerPermission (KeyContainerPermissionFlags flags, KeyContainerPermissionAccessEntry[] accessList) {
            if (accessList == null) 
                throw new ArgumentNullException("accessList");
            Contract.EndContractBlock();

            VerifyFlags(flags);
            m_flags = flags;
            m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
            for (int index = 0; index < accessList.Length; index++) {
                m_accessEntries.Add(accessList[index]);
            }
        }
 public KeyContainerPermission (KeyContainerPermissionFlags flags) {
     VerifyFlags(flags);
     m_flags = flags;
     m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
 }
 internal KeyContainerPermissionAccessEntryEnumerator (KeyContainerPermissionAccessEntryCollection entries) {
     m_entries = entries;
     m_current = -1;
 }
 public KeyContainerPermission(KeyContainerPermissionFlags flags)
 {
     VerifyFlags(flags);
     m_flags         = flags;
     m_accessEntries = new KeyContainerPermissionAccessEntryCollection(m_flags);
 }
 internal KeyContainerPermissionAccessEntryEnumerator(KeyContainerPermissionAccessEntryCollection entries)
 {
     m_entries = entries;
     m_current = -1;
 }
示例#19
0
		public override IPermission Union (IPermission target)
		{
			KeyContainerPermission kcp = Cast (target);
			if (kcp == null)
				return Copy ();

			KeyContainerPermissionAccessEntryCollection kcpaec = new KeyContainerPermissionAccessEntryCollection ();
			// copy first group
			foreach (KeyContainerPermissionAccessEntry kcpae in _accessEntries) {
				kcpaec.Add (kcpae);
			}
			// copy second group...
			foreach (KeyContainerPermissionAccessEntry kcpae in kcp._accessEntries) {
				// ... but only if not present in first group
				if (_accessEntries.IndexOf (kcpae) == -1)
					kcpaec.Add (kcpae);
			}

			if (kcpaec.Count == 0)
				return new KeyContainerPermission ((_flags | kcp._flags));

			KeyContainerPermissionAccessEntry[] list = new KeyContainerPermissionAccessEntry [kcpaec.Count];
			kcpaec.CopyTo (list, 0);
			return new KeyContainerPermission ((_flags | kcp._flags), list);
		}